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

WinForms - Disable default mouse hover over item behaviour?

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

我有一个计时器可以根据 ComboBoxSelectedIndex 刷新 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();
}

您的案例的解决方案

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

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