【问题标题】:Delaying opening of sub-menus in a menustrip延迟打开菜单条中的子菜单
【发布时间】:2011-06-01 14:34:49
【问题描述】:

我们的环境:Visual Studio 2010、c#、.net 4 客户端配置文件。

我们有一个 Winforms 应用程序,它的主窗体中包含一个菜单条。菜单条的项目包含图像 (64x64) 和文本。主窗体还有一个包含 5 个选项卡的 TabControl。在主窗体的 OnLoad() 方法中,我们隐藏了 TabControl 标题,使它们不可见,因此不可单击。相反,当用户单击菜单条中的某个项目时,我们会切换活动选项卡。

但是,我们的菜单有很多子菜单项,并且由于我们使用主菜单条来选择活动选项卡,因此我们希望子菜单项仅在用户单击菜单项一段时间后才会出现,而不是瞬间。否则,每当用户改变他/她的活动视图(通过选择一个tabPage),子菜单就会出现在屏幕上,因为他/她点击了一个包含子菜单的菜单条项目。

这可能吗?

【问题讨论】:

    标签: winforms user-interface submenu menustrip


    【解决方案1】:

    我不完全理解其中的原理,但是您可以使用 MouseDown 处理程序和睡眠功能来延迟子菜单的显示,如下所示:

    Private Sub FileToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileToolStripMenuItem.MouseDown
    System.Threading.Thread.Sleep(2000) ' wait two seconds
    End Sub
    

    =======================

    (编辑:添加第二个解决方案)

    您可以使用计时器控件和 ShowDropDown/HideDropDown 来做到这一点:

    Private Sub FileToolStripMenuItem_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FileToolStripMenuItem.MouseDown
    ' show tab here'
    FileToolStripMenuItem.HideDropDown()
    Timer1.Interval = 500
    Timer1.Start()
    End Sub
    
    Private Sub FileToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileToolStripMenuItem.Click
    FileToolStripMenuItem.HideDropDown()
    End Sub
    
    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Timer1.Stop()
    FileToolStripMenuItem.ShowDropDown()
    End Sub
    

    【讨论】:

    • 如果我们这样做,那么切换活动标签也会延迟两秒。我们希望活动选项卡能够立即切换,因为用户想要切换他/她的视图,但是如果他按住工具条菜单 0.5 秒,我们希望子菜单也出现。
    • @Somethingbetter - 您能否将您的发送者对象转换为适当的类型,然后根据其类型或状态分支到睡眠(2000)或不睡眠?
    • 请原谅VB,但它应该接近C#。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2012-03-11
    相关资源
    最近更新 更多