Arrow Keys

  • Thread starter Thread starter Rlrcstr
  • Start date Start date
R

Rlrcstr

How can you detect when an arrow key gets pressed? Doesn't seem to trigger
a KeyPress or KeyDown event. Thanks.

Jerry
 
sorry - posted too soon ... use the KeyDown event. check for keys.left and
keys.right. if your KeyDown handler is form-wide, dont forget to set
KeyPreview to true.
 
I'm not getting an event when the arrow is pressed. I do get one when the
space bar is pressed, but not on an arrow press.

Any thoughts?
 
I have no problems with KeyDown getting both arrow key events and space key.
You get space but not arrow. What controls do you have on the form? Almost
certainly the arrow keys are being intercepted by a control on your form.
Search the .net help for "arrow and keydown" for interesting reading.
 
It's a usercontrol inside a scrollable panel container inside another
usercontrol.

I'm creating the inner usercontrols dynamically and then allowing the user
to scroll through as many as have been created. Kinda like a listbox forthe
usercontrols.

I originally tried actually using an ownerdraw listbox - it has a controls
collection - but it also has issues displaying controls when scrolling, so I
decided to create my own.

I'm very close but I still have to main issues and one of them is that I'm
not getting the KeyDown trigger when an arrow is pressed. I don't
understand why I would get other KeyDown events and not the arrows. It's
strange seems that I get every other key. I even get modified arrows (i.e.
Ctrl + Arrow) but nothing on a plain old arrow.

I will search as you suggested, but in the mean time, if you have any other
thoughts, I'm open...

Jerry
 
Override IsInputKey

Protected Overrides Function IsInputKey(ByVal keyData As
System.Windows.Forms.Keys) As Boolean
IsInputKey = True
End Function
 
I started to read something about that. How can you do that with a control
that is instantiated dynamically? Or do I have to create my own subclass?

Thanks.

Jerry
 
Yes, not hard. You don't even have to create a library to do it.


Public Class UserControl1
Inherits System.Windows.Forms.UserControl

Public Sub New()
Mybase.New()
End Sub

Protected Overrides Function IsInputKey(ByVal keyData As
System.Windows.Forms.Keys) As Boolean
IsInputKey = True
End Function

End Class


Your form:

Dim Withevents myControl as UserControl1

mycontrol.Parent = '-- Whatever
myControl.Location = '-- Wherever
myControl.Size = '-- Whatever
 
Makes perfect sense. Thanks.

Jerry


Some Guy said:
Yes, not hard. You don't even have to create a library to do it.


Public Class UserControl1
Inherits System.Windows.Forms.UserControl

Public Sub New()
Mybase.New()
End Sub

Protected Overrides Function IsInputKey(ByVal keyData As
System.Windows.Forms.Keys) As Boolean
IsInputKey = True
End Function

End Class


Your form:

Dim Withevents myControl as UserControl1

mycontrol.Parent = '-- Whatever
myControl.Location = '-- Wherever
myControl.Size = '-- Whatever
 
I spoke too soon. It makes sense, but it doesn't seem to work.

I created the new class and replaced my New statement with the new class,
but the IsInputKey function in the subclass never gets called - I get the
same behavior. No arrows.

These controls are in a panel control. Do I have to subclass that guy? Is
it absorbing the keystrokes? Or do I have to subclass each of the child
controls (checkboxes and labels) on the new usercontrol and do the same
thing with them? This just seems so much more complicated that it should
be, just to capture an arrow key press.

Thanks.

Jerry
 
Got it...

You have to override IsInputKey in the child controls and return true for
keys that you want the parent to see and then override processKeyPreview in
the parent and look for those keystrokes.

Thanks for your help. On to the next hurdle...

Jerry

Have to override the processKeyPreview event in the usercontrol
 
Back
Top