Is it possible to disable keyboard input to a control? For instance a ListView
? How do I do that? I've tried overriding the KeyUp
KeyDown
events but apparently that was not the way?
IsEnabled
is a good solution, however I only wish to disable keyboard interaction and leave mouse interaction intact.
Handling the KeyDown
event is too late, but you can handle the PreviewKeyDown event and that should give you the behavior you are looking for:
private void MyListBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
Dear maciek, the only thig you need to do is using OnKeyDown event just do
private void txtInput_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true; // user can input
e.Handled = false; // user cannot input
}
KeyDown generally works for me if you do the following in it:
e.Handled = true;
e.SuppressKeyPress = true;
A more complete example with a practical application (disabling input from non-numeric characters): http://cccontrols.codeplex.com/SourceControl/changeset/view/34146#611536
John makes a good point though. Any reason you would want to disable interaction with the Control
but not set Enabled
= false
?
Edit: I just noticed the WPF tag. Not so sure of my answer anymore since I'm a WPF hater ;-)
That is the purpose of the WebControl.Enabled = false;
to prevent it from responding to user input.
edit: now that the question has changed, disabling the control is no longer a solution. However I think a control that responds to mouse clicks by not keyboard is buggy, not everyone prefers to use the mouse.
KeyPressEventArgs.Handled
: Gets or sets a value indicating whether the KeyPress event was handled.
Property Value
Boolean
true
if the event is handled; otherwise, false
.
if you set e.Handled = true
, keyboard event not dispatch anymore.