how to assign a numeric shortcut to a button o c# - c#

I'm trying to assign a number key for a calculator project, how ever, it only accepts letters as shortcut.
Using a letter:
private void Calculator_KeyDown(object sender, KeyEventArgs e){
if(e.KeyCode.ToString() == "A"){
MessaBox.Show("hi");
}
}
And it works fine, but what I really want to do is to replace "A" for "1", and when I do it doesn't work.
I also already tried this:
if(e.KeyCode == Keys.NumPad1){
}

Try this:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D1 || e.KeyCode == Keys.NumPad1)
MessaBox.Show("hi");
}
}
Also if this KeyDown event is a handler for your Form I assume you've set your form's KeyPreview property to true, so your can intercept the event first on a form level.

I just try ur code its work fine with me but you need to enable KeyPreview property of the form to True ;
if (e.KeyCode == Keys.NumPad1)
{
MessageBox.Show("HI");
}

Related

TextBox KeyPress event doesn't fire

I have a Form with nine TextBox controls. Each one has a KeyPress event handler that fires on Enter/Return and more.
The fifth TextBox(Kategorie) and sixth (Ort) don't fire. The others do. The code is:
private void tb_Kategorie_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show("works");
if (e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.Return)
{
tb_Ort.Focus();
}
else if (e.KeyChar == (char)Keys.Escape)
{
tb_Kategorie.Text = escSpeicher;
tb_Kategorie.SelectAll();
}
}
The event handler is set in the Designer and in designer.cs. The button and the code are not copy/pasted. Can someone tell me where the problem is?
// You Can Use Key Down method here
private void tb_Kategorie_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("works");
if (e.KeyCode== Keys.Enter || e.KeyCode== Keys.Return)
{
tb_Ort.Focus();
}
else if (e.KeyCode== Keys.Escape)
{
tb_Kategorie.Text = escSpeicher;
tb_Kategorie.SelectAll();
}
}
// try this
Try to set the Form.KeyPreview property to True
It is something with the Autocomplete Source.
This is the same problem like in
Autocomplete on Combobox onkeypress event eats up the Enter key
It is not really solved, but a nice workaround

C# - How to override actions for "Up arrow" and "Down arrow" for a textbox?

I have a textbox and below it i have a listbox.
While the user is typing in the textbox if he presses the up or down arrow he should make a selection in the listbox. The textbox detects all the characters (except space) but it seems that it can't detect the arrow presses.
Any solution for this? This is a WPF project btw.
EDIT, Here's the working code thanks to T.Kiley:
private void searchBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.IsDown && e.Key == Key.Down)
{
e.Handled = true;
//do your action here
}
if (e.IsDown && e.Key == Key.Up)
{
e.Handled = true;
//do another action here
}
}
I just tried this and it works. Add a preview key down event to the textbox
private void TextBox_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.IsDown && e.Key == Key.Down)
MessageBox.Show("It works");
}
You can listen to they KeyDown event of the TextBox. In the handler, check whether the arrow key was pressed (you might need to listen to key up to avoid triggering your code multiple times if the user holds down the button for too long).
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Down)
{
// Do some code...
}
}

C# Textbox Keypress Control Help

I have a standard textbox that I want to perform an action on a keypress. I have this code currently:
private void idTextEdit_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter/Return)
{
e.Handled = true;
SearchButtonClick(sender, EventArgs.Empty);
}
}
The problem is, I have tried both Enter and Return up there which is the reason for that. It is only firing that check for normal keys that are not like shift, control, etc. How can I design this so that it will pick up and use the enter/return key in the same way?
You should use the KeyDown event instead:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
//...
}
}
If it for some reason has to be KeyPress, you can use (char)13 or '\r' for your check, though I doubt that would work well on a non-Windows OS.
if (e.KeyChar == '\r')
You cannot just cast Keys.Return to a char, because it's a bitflag enum and doesn't just hold the corresponding ASCII code.
Use the KeyDown event instead.

Not able to capture Enter key in WinForms text box

When the user is entering a number into a text box, I would like them to be able to press Enter and simulate pressing an Update button elsewhere on the form. I have looked this up several places online, and this seems to be the code I want, but it's not working. When data has been put in the text box and Enter is pressed, all I get is a ding. What am I doing wrong? (Visual Studio 2008)
private void tbxMod_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnMod.PerformClick();
}
}
Are you sure the click on the button isn't performed ? I just did a test, it works fine for me. And here's the way to prevent the "ding" sound :
private void tbxMod_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnMod.PerformClick();
e.SuppressKeyPress = true;
}
}
A few thoughts:
does the form have an accept-button (set on the Form) that might be stealing ret
does the textbox have validation enabled and it failing? try turning that off
does something have key-preview enabled?
Under "Properties" of the Form. Category (Misc) has the following options:
AcceptButton, CancelButton, KeyPreview, & ToolTip.
Setting the AcceptButton to the button you want to have clicked when you press the Enter key should do the trick.
Set e.Handled to true immediately after the line btnMod.PerformClick();.
Hope this helps.
I had to combine Thomas' answer and Marc's. I did have an AcceptButton set on the form so I had to do all of this:
private void tbxMod_Enter(object sender, EventArgs e)
{
AcceptButton = null;
}
private void tbxMod_Leave(object sender, EventArgs e)
{
AcceptButton = buttonOK;
}
private void tbxMod_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Click your button here or whatever
e.Handled = true;
}
}
I used t0mm13b's e.Handled, though Thomas' e.SuppressKeyPress seems to work as well. I'm not sure what the difference might be.
form properties > set KeyPreview to true
The simple code below works just fine (hitting the Enter key while in textBoxPlatypusNumber displays "UpdatePlatypusGrid() entered"); the form's KeyPreview is set to false:
private void textBoxPlatypusNumber_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Enter)
{
UpdatePlatypusGrid();
}
}
private void UpdatePlatypusGrid()
{
MessageBox.Show("UpdatePlatypusGrid() entered");
}

C# Winform Alter Sent Keystroke

Hi i have a C# winform application with a particular form populated with a number of textboxes. I would like to make it so that by pressing the right arrow key this mimicks the same behaivour as pressing the tab key. Im not really sure how to do this.
I dont want to change the behaivour of the tab key at all, just get the right arrow key to do the same thing whilst on that form.
Can anyone offer any suggestions?
You should override the OnKeyUp method in your form to do this...
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
Control activeControl = this.ActiveControl;
if(activeControl == null)
{
activeControl = this;
}
this.SelectNextControl(activeControl, true, true, true, true);
e.Handled = true;
}
base.OnKeyUp(e);
}
You can use the KeyDown event on the form to trap the key stroke then perform whatever action you want. For example:
private void MyForm_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Right)
{
this.SelectNextControl(....);
e.Handled = true;
}
}
Don't forget to set the KeyPreview property on the form to True.
I think this will accomplish what you're asking:
private void form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Right)
{
Control activeControl = form1.ActiveControl;
// may need to check for null activeControl
form1.SelectNextControl(activeControl, true, true, true, true);
}
}

Categories