У меня есть ComboBox с парой предметов. Я хочу поместить SelectedIndex
ComboBox в 0
, поэтому, когда пользователь запускает его, первый элемент уже выбран (по умолчанию).
Однако выполнение этого (combobox.SelectedIndex = 0;
) мешает моему событию combobox_SelectedIndexChanged()
, которое происходит, когда пользователь изменяет SelectedIndex ComboBox, перезапуская программу:
private void combobox_SelectedIndexChanged(object sender, EventArgs e)
{
Process.Start(Application.ExecutablePath);
this.Close();
}
Это вызовет бесконечный цикл combobox_SelectedIndexChanged()
, так как combobox.SelectedIndex = 0;
вызовет его, который снова вызовет другой цикл и так далее ...
Есть ли способ позволить программе что-то делать при изменении SelectedIndex пользователем без этого цикла?
2 ответа
Удалите обработчик событий (щелкните значок молнии в верхней части панели свойств. затем очистите обработчик 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();
}
Вы можете добавить свойство для подавления выполнения события
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
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.