简体   繁体   中英

WinForms - Disable default mouse hover over item behaviour?

I have a ComboBox with items in it. I also have a SelectedIndexChange event. When I open the ComboBox and hover over an item, the SelectedIndex property seems to change to that item. I'd only like it to change when I click on the item. Is it possible to disable that behavior?

I have a timer that refreshes an Image based on SelectedIndex of ComboBox , but still, even if I highlight an item but don't select, why does the Image changes while it should not change and it only should change when I select an item.

The Problem

When the the mouse moves on items of ComboBox , the SelectedIndex changes but SelectedIndexChanged event doesn't fire, so in your timer Tick event, you will see the change while SelectedIndexChanged doesn't fire.

Scenario of reproducing the problem

To simply reproduce the problem, put a Timer on a form and enable it, then handle its Tick event. Also add a ComboBox and add some items to it and handle its SelectedIndexChanged event. When you open the dropdown and move mouse over items, you will see the Text of form changes to the index of item that is under the cursor, while SelectedIndexChanged doesn't fire and no MessageBox will show.

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();
}

The Solution for your case

You can simply check if the dropdown is not open using DroppedDown property of ComboBox , then do the job:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM