2015-11-13 9 views
0

У меня есть ComboBox с элементами в нем. У меня также есть событие SelectedIndexChange. Когда я открываю ComboBox и наведите указатель мыши на элемент, свойство SelectedIndex, похоже, изменится на этот элемент. Я бы просто хотел, чтобы он изменился, когда я нажимаю на элемент. Можно ли отключить это поведение?WinForms - Отключить по умолчанию курсор мыши над поведением элемента?

У меня есть таймер, который Обновляет Image основанный на SelectedIndex из ComboBox, но все равно, даже если я выделить элемент, но не выбрать, то почему Image изменения в то время как он не должен меняться, и это только должно измениться, когда я выберите предмет.

+0

У меня есть изображение в моя программа, которая изменяет значение свойства Image в Image с помощью combobox. Когда я выделяю элемент, изображение по какой-то причине изменяется на это значение. Я только хочу сделать это, когда я нажимаю на элемент. (также, когда выделяется элемент, кажется, что он пропускает какой-то код или что-то в этом роде, так как он не отображает панель, которую он должен отображать и продолжает вызывать loadImage()). – XeZrunner

+0

Можете ли вы отлаживать приложение, установив точку останова в событии 'SelectedIndexChange' обработчик и зависание над 'ComboBox'? Удалось ли точка останова? – Michael

+0

Нет, это срабатывает только при нажатии. Я понял часть проблемы, у меня есть таймер, который обновляет изображение каждые х секунд. Но все же, даже если я выделяю элемент, почему изображение меняется на это значение? Он не должен, он должен только тогда, когда я нажимаю. (также событие таймера установлено для обновления изображения до значения combobox.SelectedIndex) – XeZrunner

ответ

2

Проблема

Когда мышь движется по пунктам ComboBox, в SelectedIndex изменения, но SelectedIndexChanged событие не срабатывает, так что в вашем случае таймер Tick, вы увидите изменения в то время как SelectedIndexChanged не Огонь.

Сценарий воспроизведения проблемы

Чтобы просто воспроизвести проблему, поставить Timer на форму и включите его, а затем обработать его Tick событие. Также добавьте ComboBox и добавьте некоторые элементы к нему и обработайте его событие SelectedIndexChanged. Когда вы открываете выпадающий список и перемещаете мышь над элементами, вы увидите Text изменений формы в индекс элемента, находящегося под курсором, тогда как SelectedIndexChanged не срабатывает и не отображается MessageBox.

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    MessageBox.Show(this.comboBox1.SelectedIndex.ToString()); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    this.Text = this.comboBox1.SelectedIndex.ToString(); 
} 

Решение для Вашего случая

Вы можете просто проверить, если выпадающий не открыт, используя DroppedDown свойство ComboBox, затем сделать работу:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if(!this.comboBox1.DroppedDown) 
     this.Text = this.comboBox1.SelectedIndex.ToString(); 
} 
Смежные вопросы