2012-02-10 1 views
0

이 이벤트는이Control Event를 호출하지 않는 방법이 있습니까?

private void MyComboBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //do something// 
} 

같은 ComboBox_SelectedIndexChange 뭔가가 그리고 내가 콤보 상자의 값을 변경하는 기능을 가지고의가 있다고 가정 해 봅시다. 따른 myComboBox의 값을 변경하는 동안

Private void MyFunction() 
{ 
    MyComboBox.Text = "New Value"; 
} 

내가 이벤트를 호출의 MyFunction 방지 할 수는 MyComboBox_SelectedIndexChanged?

답변

2

내가 이벤트를 호출의 MyFunction 방지 할 수는 MyComboBox_SelectedIndexChanged?

아니요.

  1. 당신은, 컨트롤에서 이벤트 처리기 방법을 풉니 값을 설정 한 다음 컨트롤에 이벤트 처리기 메서드를 다시 할 수 있습니다 : 당신은 같은 일을 수행 둘 다 두 가지 기본적인 옵션을 사용할 수 있습니다. 예를 들어 :

    private void MyFunction() 
    { 
        MyComboBox.SelectedIndexChanged -= MyComboBox_SelectedIndexChanged; 
        MyComboBox.Text = "New Value"; 
        MyComboBox.SelectedIndexChanged += MyComboBox_SelectedIndexChanged; 
    } 
    
  2. 당신은 값이 프로그램 또는 사용자가 업데이트되었는지 여부를 추적하는 클래스 수준 필드를 선언 할 수 있습니다. 콤보 상자를 프로그래밍 방식으로 업데이트하려는 경우 필드를 설정하고 SelectedIndexChanged 이벤트 처리기 메서드에서 해당 값을 확인하십시오.

    private bool allowComboBoxChange = true; 
    
    private void MyComboBox_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        if (allowComboBoxChange) 
        { 
         //do something 
        } 
    } 
    
    private void MyFunction() 
    { 
        allowComboBoxChange = false; 
        MyComboBox.Text = "New Value"; 
        allowComboBoxChange = true; 
    } 
    
: 예를 들어
1

이벤트 처리기를 부착하거나 분리 할 수 ​​있습니다. 따른 myComboBox의 값을 변경하는 동안

//attach the handler 
MyComboBox.SelectedIndexChanged+=(sender,eventArgs)=> 
{ 
    //code 
}; 
//detach the handler 
MyComboBox.SelectedIndexChanged-=(sender,eventArgs)=> 
{ 
    //code 
}; 

또는

Private void MyFunction() 
{ 
    comboBox1.SelectedIndexChanged -= new EventHandler(TestIt); 
    MyComboBox.Text = "New Value"; 
    comboBox1.SelectedIndexChanged += new EventHandler(TestIt); 
} 

private void TestIt(object sender, EventArgs e) 
{ 
    //do something// 
} 
관련 문제