2013-12-23 2 views
4

У меня есть ComboBox с несколькими элементами. Я хочу поставить SelectedIndex ComboBox на 0, поэтому, когда пользователь запустит его, первый элемент уже выбран (по умолчанию).Установить значение по умолчанию ComboBox без прямого изменения SelectedIndex

Однако, делая это (combobox.SelectedIndex = 0;) мешает моему событию combobox_SelectedIndexChanged(), которое происходит, когда пользователь изменяет SelectedIndex из ComboBox, перезапуска программы:

private void combobox_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      Process.Start(Application.ExecutablePath); 
      this.Close(); 
     } 

Это приведет к combobox_SelectedIndexChanged() цикличным endlessy как combobox.SelectedIndex = 0; вызовет его, что снова вызовет другой и т. д. ...

Есть ли способ, чтобы программа могла что-то сделать при изменении SelectedIndex пользователем без этого цикла?

ответ

7

удалите обработчик событий (щелкнув молнию в верхней части панели свойств, затем очистите обработчик SelectedIndexChanged).

и в коде конструктора сначала установите SelectedValue, а затем добавьте обработчик событий. здесь:

public Form1() 
{ 
    InitializeComponent(); 

    comboBox1.SelectedIndex = 0; 
    comboBox1.SelectedIndexChanged += combobox_SelectedIndexChanged; 
} 

private void combobox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Process.Start(Application.ExecutablePath); 
    this.Close(); 
} 
+0

Это странно запускает 'Sytem.ObjectDisposedExecution'. – jacobz

+0

это еще одна проблема. – dovid

0

Вы можете добавить свойство для подавления исполнения ордеров событие с

internal bool SupressSelectIndexChanged {get; set;} 

private void SomeCallingMethod(){ 
    this.SupressSelectIndexChanged = true; 
    combobox.SelectedIndex = 0; 
    this.SupressSelectionIndexChanged = false; 
} 

private void combobox_SelectIndexChanged(object sender, EventArgs e){ 
    if(this.SupressSelectIndexChanged){ return; } 

    // - execution logic 
} 
+0

что SomeCallingMethod()? вы можете напрямую изменить свойство. – dovid

+0

@lomed SomeCallingMethod() - это всего лишь пример того, как можно использовать свойство. – AgustinCoder

Смежные вопросы