Я пытаюсь сделать кнопку, которая обрабатывает как входящие, так и щелчки. Я настроил свою вспомогательную процедуру для обработки как клавиатур, так и щелчков мыши, однако я не могу получить доступ к MouseEventArgs из EventrArs или KeyEventArgs из System.EventArgs. Как я могу это сделать?KeyEventArgs и MouseEventArgs
ответ
В то время как ваш вопрос не совсем ясен, похоже, что вы пытаетесь использовать ключевые события клавиатуры «от» System.EventArgs
?
Я не совсем уверен, что вы просите, но размещение кода с вашим вопросом поможет нам дать точные ответы.
Далее я предполагаю, что я предполагаю, что вы просите Уместно ниже образец:
EventArgs
типа, он также является базовым типом для всех событий.
Кажется, вы хотите подпрограмму, которая может обрабатывать как нажатия, так и нажатия клавиш за один раз.
Следующая подпрограмма «e_Handler» будет принимать MouseEventArgs
, KeyEventArgs
и KeyPressEventArgs
, проверяя тип события и приведения его в переменную, в которой и затем может проверить или использовать полученные состояния, соответственно .:
' Handler for 3 event types:
Sub e_Handler(Sender As Object, E As EventArgs)
If TypeOf E Is MouseEventArgs Then
Dim K As MouseEventArgs = CTypeDynamic(Of MouseEventArgs)(E)
MsgBox("Clicked Mouse at position " & K.Location.ToString & " on " & Sender.ToString)
End If
If TypeOf E Is KeyPressEventArgs Then
Dim K As KeyPressEventArgs = CTypeDynamic(Of KeyPressEventArgs)(E)
MsgBox("Pressed the key " & K.KeyChar & " on " & Sender.ToString)
End If
If TypeOf E Is KeyEventArgs Then
Dim K As KeyEventArgs = CTypeDynamic(Of KeyEventArgs)(E)
MsgBox("Pressed the key " & K.KeyCode & " on " & Sender.ToString)
End If
Me.Text = E.ToString
End Sub
Вы можете сделать эту рутинную обработчик для любого числа событий и управления:
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
AddHandler Me.MouseClick, AddressOf e_Handler
AddHandler Me.KeyPress, AddressOf e_Handler
AddHandler Me.KeyDown, AddressOf e_Handler
For Each C As Control In Me.Controls
AddHandler C.MouseClick, AddressOf e_Handler
AddHandler C.KeyDown, AddressOf e_Handler
AddHandler C.KeyPress, AddressOf e_Handler
Next
End Sub
Edit:
Использование CTypeDynamic
, чтобы избежать компилятора «неявное» предупреждений и обеспечивает метод обыкновение бросать и исключение, если вы установите свой проект компилировать с Option Strict
Я решил проблему по-другому, используя свойство «Me.AcceptButton». –
Вы не можете сделать это. Расскажите, почему вы это делаете. – OneFineDay