[C#] HTML<select> option 동적으로 바꾸기
코멘트 http://chaoskcuf.com/entry/C-텍스트-파일에서-원하는-줄만-가져오기#comment3057 에 대한 답변입니다.
왼쪽과 같은 모양의 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을 변경할 수 있습니다.
"프로그래밍 / TIP& Study" 분류의 다른 글
| [퀴즈] SQLite collate 문제 (0) | 2010/07/16 |
| [TIP] XP, Vista에서 CD/DVD롬이 보이지 않을 경우 (1) | 2009/08/05 |
| [C#] WinForm 에서 Docking 순서 변경하기 (0) | 2009/07/29 |
| [WPF] InkCanvas 사용하기 (0) | 2009/06/29 |
| [C#] Control Library 만들 때 TIP (0) | 2009/06/26 |
| [C#] 자연스럽게 Pen으로 그리기 (0) | 2009/06/23 |
| [WPF] Canvas의 Width, Height Binding (0) | 2009/06/23 |
| [C#] DateTime으로 7일 후는 어떻게? (0) | 2009/06/23 |

댓글을 달아 주세요
감사합니다 (__)
먼저감사의 말씀을 드립니다 앞선 셀렉트박스의 경우는 조언주신대로 해서 처리가 되었는데요
이번은 좀더 난이도 가 있는건지 앞선코드로 작성하여봐도 바껴지지가 않더라고요
웹브라우저에 로딩되 스크립트는 제가변경할수없는거고요
<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);
이렇게 해도 셀렉트박스가 변경이 되지를 않네요 ㅠ.ㅠ.
조언을 다시한번더 부탁드립니다
webBrowser1.Document.GetElementById("editorSelect").SetAttribute"selectedIndex", "2");
이 코드로 한번 해보세요
질문한가지 해보겠습니다
프로그램을 하나 만들었는데
일정한지점에서 창이 맨앞으로 나오도록 하고 싶습니다
포커스가 항상 맨앞으로 위치를 해야한다는 것이지요
프로그램을 만들었는데 sendkey 입력이 있는데 창이 뒤에 있거나 내려가면
sendkey 이 전혀 엉뚱한 결과를 내거든요;;;
http://chaoskcuf.com/entry/C-Form을-활성화하기
글을 참고하세요~
select 문이 4개가 있는데 그중에 선택하려면 어떻게 하는지요?
좋은 내용 감사요.. 퍼갑니다..