I have created a basic add-on that shows a modal windows form. The only issue I am running into is that I am completely unable to capture any key events in the form. I just want to make the escape key close my form, but I'm having no luck. Here is my basic setup:
<CommandMethod("myCommand")> _ Public Sub myCommand() Dim myForm As Form1 = New Form1 Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(myForm) End Sub
Then in the form code, I have this, for testing purposes:
Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress MsgBox("keypress") End Sub
I've also tried KeyUp and KeyDown. Key presses are working inside the form (I can use the keyboard to select an item in a combobox, for example), but I never hit the event handlers. Does anyone have a clue what I'm doing wrong here?
Thanks!
Solved! Go to Solution.
Solved by hgasty1001. Go to Solution.
Hi:
You need to set the KeyPreview form's property to true, and then capture the keydown event with something like:
Private Sub MyForm_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Windows.Forms.Keys.Escape Then
Me.Close()
End If
End Sub
Gaston Nunez
Here is code snip to capture KeyPress on numeric only textbox
which is allow you to jump to the next textbox on form after click Enter:
string DSep = ','; private void txtBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if (char.IsNumber(e.KeyChar) == false & Microsoft.VisualBasic.AscW(e.KeyChar) != 46) { if (e.KeyChar == Convert.ToChar(DSep)) { e.Handled = true; } else if (Microsoft.VisualBasic.AscW(e.KeyChar) == 13) { this.txtBox2.Select(); e.Handled = false; } else { e.Handled = true; } } }
Hope that helps
~'J'~
Thank you, Gaston! The KeyPreview setting for the form is all I needed to change. It was off by default.
Brent
If all you want to do is close the form on the Escape key, you don't have to catch any key events. All you have to do is put a button on your form (it doesn't even need to be visible), and assign that button to the forms CancelButton property.