WinForms-禁用默认鼠标悬停在项目上的行为
本文关键字:项目 悬停 默认 鼠标 WinForms- | 更新日期: 2023-09-27 18:21:53
我有一个包含项目的ComboBox
。我还有一个SelectedIndexChange
事件。当我打开ComboBox
并将鼠标悬停在某个项目上时,SelectedIndex
属性似乎会更改为该项目。我只希望在单击项目时更改它。是否可以禁用该行为?
我有一个计时器,它可以根据ComboBox
的SelectedIndex
刷新Image
,但即使我高亮显示了一个项目但没有选择,为什么Image
会更改,而它不应该更改,只应该在我选择一个项目时更改。
问题
当鼠标在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();
}
您案例的解决方案
您可以简单地使用ComboBox
的DroppedDown
属性检查下拉列表是否未打开,然后执行以下操作:
private void timer1_Tick(object sender, EventArgs e)
{
if(!this.comboBox1.DroppedDown)
this.Text = this.comboBox1.SelectedIndex.ToString();
}