Есть ли способ не вызывать Control Event? - PullRequest
0 голосов
/ 10 февраля 2012

Допустим, есть событие ComboBox_SelectedIndexChange, например,

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

И у меня есть функция, которая изменяет значение ComboBox.

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

Могу ли я заставить MyFunction предотвратить вызов событияMyComboBox_SelectedIndexChanged при изменении значения MyComboBox?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Можно ли заставить MyFunction предотвращать вызов события MyComboBox_SelectedIndexChanged при изменении значения MyComboBox?

Нет, вы не можете.У вас есть два основных варианта, каждый из которых выполняет одно и то же:

  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 голос
/ 10 февраля 2012

Вы можете прикрепить или отсоединить обработчик событий.

//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//
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...