WinForms-禁用默认鼠标悬停在项目上的行为

本文关键字:项目 悬停 默认 鼠标 WinForms- | 更新日期: 2023-09-27 18:21:53

我有一个包含项目的ComboBox。我还有一个SelectedIndexChange事件。当我打开ComboBox并将鼠标悬停在某个项目上时,SelectedIndex属性似乎会更改为该项目。我只希望在单击项目时更改它。是否可以禁用该行为?

我有一个计时器,它可以根据ComboBoxSelectedIndex刷新Image,但即使我高亮显示了一个项目但没有选择,为什么Image会更改,而它不应该更改,只应该在我选择一个项目时更改。

WinForms-禁用默认鼠标悬停在项目上的行为

问题

当鼠标在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();
}

您案例的解决方案

您可以简单地使用ComboBoxDroppedDown属性检查下拉列表是否未打开,然后执行以下操作:

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