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

标签 .net vb.net winforms windows-7

我有一个带有 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

最佳答案

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

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

像这样的下拉菜单实际上只适用于简单的项目,在其中放置任何控件来创建顶级窗口,例如 DateTimePicker 或 ComboBox 只是不支持的场景。

关于.net - 工具条 (ToolStripDropDownButton) 关闭并失去窗口焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919634/

相关文章:

.net - 处置 Microsoft.Owin.Hosting.WebApp 抛出 'System.ObjectDisposedException'

c# - 分钟内的 Hangfire 重复任务

vb.net - VB.NET 中的 TryCast 和直接转换是什么?

mysql - 无法将 ASP.NET 网页与 mysql 连接

c# - 为什么最后一个关闭的 MDI 子窗体没有被垃圾回收?

.net - 如何在不注册的情况下在.NET(C#)中使用AutoItX

.net - 在 Rider 中将 HostingEnvironment.EnvironmentName 设置为 Development

vb.net - 使用 DLL 中的类创建 VB6 应用程序,然后在构建后换出该 DLL?

c# - 如何在 UserControl 中设置设计 View 项,以便多个子控件具有这些项

.net - 多 "column"DataGridView C#