개발자 블로그
C# 윈폼 - 소스코드를 통한 콤보박스 변경시 이벤트 안받게하려면 본문
콤보박스 선택된 인덱스의 변경이벤트를 위해서 SelectedIndexChanged 이벤트를 구현한다. 이 경우 소스코드를 통한 변경에도 SelectedIndexChanged 이벤트가 호출된다.
경우에 따라 프로그램 코드를 통한 콤보박스 선택인덱스를 변경하는 경우에는 이벤트를 타지 않기를 원하는 경우가 있다. 아래 설명하는 내용은 사용자가 직접 콤보박스의 인덱스는 변경하는 경우에만 이벤트를 타도록 하는 방법이다.
1. Focused 프로퍼티를 이용하는 방법
Focused 프로퍼티는 해당 컨트롤에 포커스가 있는지 여부를 조사한다. 사용자가 조작하는 경우에는 해당 컨트롤이 포커스를 받고있기 때문에 true가 된다. 이를 이용하는 코드는 아래와 같다.
private void comboBox_name_SelectedIndexChanged(object sender, EventArgs e) { if(comboBox_name.Focused != true) { return; // 포커스가 없는 상태에서의 변경은 처리안함 } // 필요한 처리 추가 }
2. SelectionChangeCommitted 이벤트를 이용하는 방법
SelectedIndexChanged 이벤트 대신 SelectionChangeCommitted 이벤트를 구현한다. SelectionChangeCommitted 이벤트는 콤보박스의 드롭다운 목록에서 항목을 선택한 다음 드롭다운 목록을 닫았을 때 발생한다. 따라서 사용자가 직접 조작하는 경우에만 이벤트가 호출된다.
private void comboBox_name_SelectionChangeCommitted(object sender, EventArgs e) { // 필요한 처리 추가 }
2번의 방법이 불필요한 코드가 없어서 더 깔끔한 방법으로 느껴진다. 다만 1번의 방법은 콤보박스 뿐만 아니라 포커스를 받을 수 있는 다른 컨트롤 - 예를들면 textBox같은 - 에도 사용할 수 있는 방법이다.
'프로그래밍 > Windows' 카테고리의 다른 글
C# Windows 방화벽에 의한 차단여부 확인 (0) | 2017.02.21 |
---|---|
Visual Studio에서 아이콘을 제대로 변경했는데도 안바뀐다면? (2) | 2016.04.29 |
C# TextBox BackgroundImage 적용하기 (0) | 2016.03.25 |
카카오톡PC에서 사용하는 오픈소스 라이브러리 (0) | 2016.03.18 |
C# 이미지 저작 툴을 개발하면서 참조한 사이트들 (0) | 2016.03.08 |
Comments