在鼠标离开事件时关闭 ComboBox DropDown

Ind*_*igo 5 .net c# combobox dropdownbox winforms

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

就像我可以打开的下拉MouseMove通过设置事件comboBox.DroppedDown = true; 然而,当我设置此相同的是不工作comboBox.DroppedDown = false;MouseLeave情况下将其关闭。

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

小智 5

首先我必须说我不是一个经验丰富的程序员,而且我刚刚开始使用 WPF。我知道这个问题已经有两年了,但我遇到了同样的问题,我发现我可以使用事件IsMouseDirectlyOverChanged关闭 ComboBox 的下拉列表。对我来说真正烦人的是我有一个组合框和一个按钮,如果在没有进行选择的情况下打开下拉菜单并且我想单击该按钮,则第一次单击时什么也不会发生,因为第一次单击下拉菜单菜单正在关闭。之后我可以点击按钮。

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

private void comPortList_IsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs e)
    {

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

    }
Run Code Online (Sandbox Code Playgroud)

当鼠标指针位于打开的组合框上方时,将触发此事件。如果不打开下拉列表,则不会触发。

我看到的另一件事是,当您进入打开的组合框以及离开它时,都会触发此事件。如果我在检查 IsDropDownOpen 属性是否为 true 之前附加文本,则当鼠标指针离开打开的组合框时,文本“MouseDirectlyOverChanged”将在我的文本框中出现两次。

如果我评论该行:

comPortList.IsDropDownOpen = false;
Run Code Online (Sandbox Code Playgroud)

并将 AppendText 和 ScrollToEnd 保留在 if 之前,文本将仅追加一次。

我希望这有帮助 :)


Vah*_*ron 0

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