WinForms - 禁用默认鼠标悬停在项目行为上?
WinForms - Disable default mouse hover over item behaviour?
我有一个 ComboBox
里面有物品。我还有一个 SelectedIndexChange
事件。
当我打开 ComboBox
并将鼠标悬停在某个项目上时,SelectedIndex
属性 似乎更改为该项目。我只希望在单击该项目时更改它。是否可以禁用该行为?
我有一个计时器可以根据 ComboBox
的 SelectedIndex
刷新 Image
,但是,即使我突出显示了一个项目但没有 select,为什么 Image
会改变,而它不应该改变,它只应该在我 select 一个项目时改变。
问题
当鼠标移动到 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();
}
我有一个 ComboBox
里面有物品。我还有一个 SelectedIndexChange
事件。
当我打开 ComboBox
并将鼠标悬停在某个项目上时,SelectedIndex
属性 似乎更改为该项目。我只希望在单击该项目时更改它。是否可以禁用该行为?
我有一个计时器可以根据 ComboBox
的 SelectedIndex
刷新 Image
,但是,即使我突出显示了一个项目但没有 select,为什么 Image
会改变,而它不应该改变,它只应该在我 select 一个项目时改变。
问题
当鼠标移动到 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();
}