关闭鼠标离开事件的ComboBox DropDown

时间:2014-07-08 15:02:18

标签: c# .net winforms combobox dropdownbox

在开发简单的Windows窗体UI应用程序时,我正在尝试创建一个效果来显示和关闭鼠标事件的下拉列表。

我可以通过设置MouseMove来打开comboBox.DroppedDown = true;事件的下拉列表 但是,当我在comboBox.DroppedDown = false;事件上设置MouseLeave来关闭它时,这种情况不起作用。

不知道这里到底需要做什么。 问题出在MouseLeave下拉列表不会失去焦点,因此除非您从列表中选择一个项目,否则它不会关闭。它等待用户从列表中选择一个项目。 如果它可能失去对MouseLeave的关注,那就行了。 请提出任何建议。

2 个答案:

答案 0 :(得分:2)

首先,我必须说我不是一位经验丰富的程序员,而我刚开始使用WPF。 我知道这个问题是两年了,但是我遇到了同样的问题,我发现我可以使用事件 IsMouseDirectlyOverChanged 关闭ComboBox的下拉列表。对我来说真正烦人的是我有一个ComboBox和一个按钮,如果打开下拉菜单而没有做出选择,我想点击按钮,第一次点击没有任何反应,因为在第一次点击下拉菜单菜单正在关闭。在此之后我可以点击按钮。

对我来说它工作正常:如果我向任何方向(向上,向左,向下,向右)移动鼠标并且消息附加到文本框控件,则下拉列表关闭。我不知道这个事件是新事物还是2年前也可以使用。

private void comPortList_IsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs e)
    {

        if (comPortList.IsDropDownOpen==true)
        {
            txtMsgBox.AppendText("MouseDirectlyOverChanged\n");
            txtMsgBox.ScrollToEnd();
            comPortList.IsDropDownOpen = false;
        }

    }

当鼠标指针悬停在打开的ComboBox上时,会触发此事件。如果您没有打开下拉列表,则不会触发。

我已经看到的另一件事是当你进入已打开的ComboBox时以及离开时触发此事件。如果我在检查IsDropDownOpen属性是否为true之前附加文本,那么文本" MouseDirectlyOverChanged"当鼠标指针离开oppened ComboBox时,我的文本框中会出现两次。

如果我对该行发表评论:

comPortList.IsDropDownOpen = false;

并在之前保留AppendText和ScrollToEnd,文本只会附加一次。

我希望这会有所帮助:)

答案 1 :(得分:0)

听起来我需要使用MouseEnter事件而不是MouseMove。它不能在MouseLeave上工作的原因是因为你的鼠标正在移动,而这只会再次将它设置为真。