[C#] HTML<select> option 동적으로 바꾸기

코멘트 http://chaoskcuf.com/entry/C-텍스트-파일에서-원하는-줄만-가져오기#comment3057 에 대한 답변입니다.

select


왼쪽과 같은 모양의 html 이 있다고 가정합니다.

단순히 select tag안에 6개의 option이 있을 뿐입니다.
html 코드는 아래와 같습니다.


<form name="form1">
<select name="FOLDER" >
<option value="">- 편지함 선택 -</option>
<option value="1111" >1111 </option>
<option value="2222" >2222 </option>
<option value="3333" >3333 </option>
<option value="4444" >4444 </option>
<option value="5555" >5555 </option>
<option value="6666" >6666</option>
</select>

option 속성에 seleted 라는 속성을 주면 기본으로 선택된다는 것은 쉽게 알 수 있습니다.

그러나 1111이 선택된  상태에서 프로그램상에서 6666을 선택하려면 어떻게 해야 할까요?

 

[방법1]


가장 쉽게 Javascript를 사용하는 것입니다.
FOLDER라는 SELECT Html Element를 찾아서 selectedIndex 를 바꾸어 주면 됩니다.

<script language=""javascript"">
function change(index)
{
    document.form1.FOLDER.selectedIndex = index;
}
</script>

그리고 위의 change라는 javascript 함수를 WebBrowser 객체에서 InvokeScript 해주면 끝입니다.


webBrowser1.Document.InvokeScript("change", new object[]{6});

코드 실행 후에는  selectedIndex는 기존 ‘편지함 선택’ index 0 에서 ‘6666’ index 6으로 변경되게 됩니다.

 

[방법2]


별도의 javascript를 사용하지 않아도 C#코드로만  Browser Document에 접근해서 속성을 변경할 수도 있습니다.
제일 먼저 해야 할 작업이 select 태그로 html element 를 찾는 것인데요

webBrowser1.Document.GetElementsByTagName("select")

위의 코드로 dom에서 select 태그를 모두 가지고 왔습니다.
GetElmentsByTagName 함수의 return 타입은 HtmlElementCollection 입니다.
제일 위의 html 코드에서는 select 태그가 하나밖에 없으므로 collection에서 제일 처음 index를 사용하면 되겠죠?

webBrowser1.Document.GetElementsByTagName("select")[0]

위의 코드는 html element collection 에서 지금 우리가 원하는 FOLDER 라는 select 태그를 얻어 온 것입니다.
이 element에 selectedIndex라는 속성을 부여하면 되겠죠?

webBrowser1.Document.GetElementsByTagName("select")[0].SetAttribute("selectedIndex", "6");

위와 같이 하면 별도의 javascript를 사용하지 않고도 쉽게 option을 변경할 수 있습니다.

chaoskcuf
tags : , , ,
프로그래밍/TIP& Study 2008/10/20 12:21

트랙백 주소 : http://chaoskcuf.com/trackback/166

댓글을 달아 주세요

  1. 김시억 2008/10/21 00:42  수정/삭제  댓글쓰기

    감사합니다 (__)

  2. 김시억 2008/10/21 00:58  수정/삭제  댓글쓰기

    먼저감사의 말씀을 드립니다 앞선 셀렉트박스의 경우는 조언주신대로 해서 처리가 되었는데요
    이번은 좀더 난이도 가 있는건지 앞선코드로 작성하여봐도 바껴지지가 않더라고요
    웹브라우저에 로딩되 스크립트는 제가변경할수없는거고요


    <select id="editorSelect" name="editorSelect" onchange="tool_EditorChange(this.value, true);">
    <option value="H" >에디터</option>
    <option value="S">HTML</option>
    <option value="T" >텍스트</option>
    </select>

    이렇게 되어 있는데요..HTML 이거를 선택되게 해야하는데요.....

    WebBrowser1.Document.GetElementById("editorSelect").SetAttribute("value", "S");
    Object[] args4 = new Object[1];
    args4[0] = "this.value";
    WebBrowser1.Document.InvokeScript("tool_EditorChange", args4);


    이렇게 해도 셀렉트박스가 변경이 되지를 않네요 ㅠ.ㅠ.
    조언을 다시한번더 부탁드립니다

    • chaoskcuf 2008/10/21 11:41  수정/삭제

      webBrowser1.Document.GetElementById("editorSelect").SetAttribute"selectedIndex", "2");

      이 코드로 한번 해보세요

  3. 김시억 2008/11/13 22:55  수정/삭제  댓글쓰기

    질문한가지 해보겠습니다

    프로그램을 하나 만들었는데

    일정한지점에서 창이 맨앞으로 나오도록 하고 싶습니다

    포커스가 항상 맨앞으로 위치를 해야한다는 것이지요

    프로그램을 만들었는데 sendkey 입력이 있는데 창이 뒤에 있거나 내려가면

    sendkey 이 전혀 엉뚱한 결과를 내거든요;;;

    • chaoskcuf 2008/11/14 10:34  수정/삭제

      http://chaoskcuf.com/entry/C-Form을-활성화하기
      글을 참고하세요~

  4. 제이썬 2011/06/23 12:40  수정/삭제  댓글쓰기

    select 문이 4개가 있는데 그중에 선택하려면 어떻게 하는지요?

  5. 판타스트 2011/11/03 20:49  수정/삭제  댓글쓰기

    좋은 내용 감사요.. 퍼갑니다..

Powerd by Textcube, designed by criuce
rss