2013-08-18 3 views
0

Я пытаюсь сделать кнопку, которая обрабатывает как входящие, так и щелчки. Я настроил свою вспомогательную процедуру для обработки как клавиатур, так и щелчков мыши, однако я не могу получить доступ к MouseEventArgs из EventrArs или KeyEventArgs из System.EventArgs. Как я могу это сделать?KeyEventArgs и MouseEventArgs

+0

Вы не можете сделать это. Расскажите, почему вы это делаете. – OneFineDay

ответ

2

В то время как ваш вопрос не совсем ясен, похоже, что вы пытаетесь использовать ключевые события клавиатуры «от» 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

+0

Я решил проблему по-другому, используя свойство «Me.AcceptButton». –