VB.NET Winforms ярлыки пунктов меню, перекрывающие ярлыки по умолчанию? - PullRequest
2 голосов
/ 19 августа 2010

В приложении VB.NET Winforms у меня есть форма, которая содержит как сетку данных, так и текстовое поле. У меня есть некоторые пункты меню, которые имеют ярлыки Ctrl + X , Ctrl + C и Ctrl + V , которые работают с сеткой данных. Тем не менее, они переопределяют ярлыки по умолчанию для вырезания, копирования и вставки текстового поля. Как сделать так, чтобы ярлыки меню применялись только тогда, когда сетка данных имеет фокус?

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

Правильный дизайн интерфейса требует отключения пункта меню, когда он не работает. Побочным эффектом является то, что он больше не будет красть нажатие клавиши, именно то, что вы хотите. Для этого удобно использовать событие Application.Idle.

Public Class Form1
    Public Sub New()
        InitializeComponent()
        AddHandler Application.Idle, Application_Idle
    End Sub
    Private Sub Application_Idle(ByVal sender As Object, ByVal e As EventArgs)
        CopyToolStripMenuItem.Enabled = DataGridView1.Focus
        '' etc...
    End Sub
End Class
2 голосов
/ 20 августа 2010

В событии DataGridView.GotFocus назначьте ярлыки, а в событии LostFocus удалите их снова.

Так что-то вроде этого:

Private Sub DataGridView_GotFocus(sender as Object, e as EventArgs) Handles DataGridView.GotFocus
  menuItem1.Shortcut = Shortcut.CtrlV
End sub

Private Sub DataGridView_LostFocus(sender as Object, e as EventArgs) Handles DataGridView.LostFocus
  menuItem1.Shortcut = Shortcut.None
End sub

Как правило, я бы не назначал другие функции для Ctrl + X , Ctrl + C и Клавиши Ctrl + V .

...