工具条(ToolStripDropDownButton)关闭并失去窗口焦点

the*_*tus 5 .net vb.net windows-7 winforms

我有一个带有 ToolStripDropDownButton 的 ToolStrip。这又会弹出一个带有 DateTimePicker 的 UserControl。当我单击日历上的顶部数字(绿色)时,一切正常(用户控件保持打开状态)。当我单击较低的日期之一(红色)时,ToolStripDropDown 关闭并且应用程序失去焦点。这导致用户必须双击才能再次打开下拉菜单(一次聚焦应用程序,另一次打开下拉菜单)。

当日历日期不在用户控件顶部时,就会发生这种情况。正如您所看到的,用户控件在“绿色”日期处停止。

我希望这一点很清楚。这似乎是一个 Windows 错误,因为这种情况发生在一个非常简单的项目中。有人见过这个问题吗?有解决办法吗?

在此输入图像描述

[更新]

我注意到下拉菜单也有同样的情况。

在此输入图像描述

当用户控制量很大时就不会发生这种情况。

在此输入图像描述

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    Dim uc As New UserControl1
    Dim cms As New ContextMenuStrip()
    cms.Items.Add(New ToolStripControlHost(uc))
    ToolStripButton1.DropDown = cms

End Sub
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 4

功能,而不是错误。该控件需要知道用户单击了下拉列表外部,以便它可以自动关闭下拉列表。这是通过“鼠标捕获”完成的,在 Winforms 中通过 Capture 属性公开。捕获鼠标可确保将鼠标消息发送到控件,即使鼠标不再位于控件窗口内。

也许现在发生的事情很明显,您实际上并没有点击日历。显示下拉列表后,控件将捕获鼠标。单击将重定向到 ToolStripDropDown。当您单击“红色区域”时,鼠标不再位于下拉列表内,从而关闭下拉窗口。

像这样的下拉菜单实际上只适合简单的项目,将任何控件放入其中以创建顶级窗口,例如 DateTimePicker 或 ComboBox 只是不受支持的方案。