如果将鼠标悬停在下拉列表中,则ComboBox SelectedIndexChanged将触发两次

时间:2017-02-23 09:16:16

标签: c# winforms

我在WinForms中有一个ComboBox,我将项目从下拉列表拖到图片框上。如果我将项目直接从组合中拖出(向右或向左),则SelectedIndexChanged会触发一次。但是如果我碰巧在光标离开组合之前将其他项目悬停在下拉列表中,则事件会触发两次。 我几乎尝试了所有我能找到的建议都无济于事。而且,是的,SelectedChangeCommitted以相同的方式工作。 对解决方案的任何想法?

1 个答案:

答案 0 :(得分:0)

有趣的是如何发布问题可能会有所帮助!我自己找到了一个可用的解决方法,如下所示: 首先,我添加了一个最初设置为0的全局整数。然后,在SelectionChangeCommitted中,我将此递增1,然后确保仅当此值为1时才运行代码。问题在于,无论何处将此变量重置为零(即准备好下一次拖动操作),它执行了两次代码。 解决方案是仅在Combo的MouseClick事件中进行重置,因为这发生在change-event之前。然后,当我尝试开始下一次拖动操作时,它将被重置。

    int runonce = 0;

    private void cmbTags_MouseClick(object sender, MouseEventArgs e) 
    {
        runonce = 0;
    }

    private void cmbTags_SelectionChangeCommitted(object sender, EventArgs e)
    {
        runonce++;
        if (runonce == 1)
        {
            // My cmbTags_SelectionChangeCommitted-code
        }
    }