Задержка открытия подменю в меню - PullRequest
2 голосов
/ 01 июня 2011

Наша среда: клиентский профиль Visual Studio 2010, c #, .net 4.

У нас есть приложение Winforms, которое содержит Menustrip в своей основной форме. Элементы меню содержат как изображение (64x64), так и текст. Основная форма также имеет TabControl, который содержит 5 вкладок. В методе OnLoad () основной формы мы скрываем заголовки TabControl, чтобы они не были видны и, следовательно, не были кликабельными. Вместо этого, когда пользователь нажимает на элемент в меню, мы переключаем активную вкладку.

Однако в наших меню много пунктов подменю, и поскольку мы используем основную меню для выбора активной вкладки, мы бы хотели, чтобы элементы подменю появлялись только после того, как пользователь щелкнет по пункту меню в течение определенного периода времени. , не мгновенно. В противном случае, когда пользователь изменяет свое активное представление (выбрав tabPage), подменю появляются на экране, так как он / она щелкает элемент меню, который содержит подменю.

Возможно ли это?

1 Ответ

1 голос
/ 02 июня 2011

Я не совсем понимаю обоснование, но вы можете отложить отображение подменю, используя обработчик 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
...