개발자 블로그

C# 윈폼 - 소스코드를 통한 콤보박스 변경시 이벤트 안받게하려면 본문

프로그래밍/Windows

C# 윈폼 - 소스코드를 통한 콤보박스 변경시 이벤트 안받게하려면

로이드.Roid 2016. 4. 13. 16:44

콤보박스 선택된 인덱스의 변경이벤트를 위해서 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같은 - 에도 사용할 수 있는 방법이다. 

Comments