Distinguished Contributor
Posts: 406
Registered: ‎12-09-2003
Message 1 of 5 (376 Views)
Accepted Solution

Can't capture key events in windows form

376 Views, 4 Replies
03-15-2012 01:36 PM

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
        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
    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?



Valued Mentor
Posts: 381
Registered: ‎04-11-2010
Message 2 of 5 (366 Views)

Re: Can't capture key events in windows form

03-15-2012 09:16 PM in reply to: BMcAnney



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
End If

End Sub


Gaston Nunez

*Expert Elite*
Posts: 1,561
Registered: ‎10-08-2008
Message 3 of 5 (361 Views)

Re: Can't capture key events in windows form

03-15-2012 11:05 PM in reply to: BMcAnney

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) {
				e.Handled = false;
			} else {
				e.Handled = true;


 Hope that helps



Distinguished Contributor
Posts: 406
Registered: ‎12-09-2003
Message 4 of 5 (351 Views)

Re: Can't capture key events in windows form

03-16-2012 05:43 AM in reply to: gasty1001

Thank you, Gaston! The KeyPreview setting for the form is all I needed to change. It was off by default.



*Expert Elite*
Posts: 750
Registered: ‎02-13-2008
Message 5 of 5 (340 Views)

Re: Can't capture key events in windows form

03-16-2012 10:31 AM in reply to: BMcAnney

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.

Dave O.                                                                  Sig-Logos32.png

You are not logged in.

Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register

Are you interested in helping shape the Autodesk Community?
We’re looking at a few different ways to improve the “All Forums” landing page and need your feedback! If interested, please take a few minutes to fill out the following Usability Study. Thank you for your time!

Need installation help?

Start with some of our most frequented solutions to get help installing your software.

Ask the Community