Allow backspace button to work in validated TextBox - c#

I have the following code to only allow letters in the text box:
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
Char pressedKey = e.KeyChar;
if (Char.IsLetter(pressedKey))
{
// Allow input.
e.Handled = false
}
else
e.Handled = true;
}
}
How can I allow the backspace key to work because, it doesnt let me to delete characters after typed

You can check if the key pressed is a Control character using Char.IsControl(...), like this:
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsLetter(e.KeyChar) && !Char.IsControl(e.KeyChar))
e.Handled = true;
}
If you specifically need to check only chars + Delete, use this:
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsLetter(e.KeyChar) && e.KeyChar != (char)Keys.Back)
e.Handled = true;
}

This is for those using VB.net. There's a weird conversion I'd never come across that took me a while to figure out.
This allows only numbers, letters, backspace and space.
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
e.Handled = e.KeyChar <> ChrW(Keys.Back) And Not Char.IsLetter(e.KeyChar) And Not Char.IsDigit(e.KeyChar) And Not Char.IsSeparator(e.KeyChar)
End Sub

Related

Textbox doesn't return current value in Visual C#

I'm trying to put the current integer value of a textbox immediately into an integer, but with following code it seems that I'm always 1 step behind :
private void txtMemoryLocation_KeyPress(object sender, KeyPressEventArgs e)
{
// Only allow numeric value
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
if (txtMemoryLocation.Text != "")
{
nLocation = int.Parse(txtMemoryLocation.Text.Trim());
}
}
I always start with a number 1 in the textbox, when I change the "1" to "10", my nLocation changes to 1, when I enter "100", nLocation becomes 10.
What is going on?
the KeyPress and KeyDown event will call before add new pressed char TextBox.Text and if e.handle is false the new char will add to TextBox.Text and TextBox.TextChanged will called. you can do this like me
Note : at first add TextChanged metod to txtMemoryLocation.TextChanged
private void txtMemoryLocation_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar));
}
private void TextChanged(object sender,EventArgs e)
{
nLocation = int.Parse(txtMemoryLocation.Text.Trim());
}
Hook the TextChanged event instead and do your parsing there. When KeyDown, KeyPress, and KeyUp fire, the textbox still hasn't had a chance to accept the new character.
Alternatively you could including the newly pressed key my modifying your existing function like this:
private void txtMemoryLocation_KeyPress(object sender, KeyPressEventArgs e)
{
// Only allow numeric value
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
if (txtMemoryLocation.Text != "")
{
nLocation = int.Parse(txtMemoryLocation.Text.Trim() + e.KeyChar);
}
}

How I can bound a checkBox with KeyPress event of a textBox in C#

Hi I'm new in C# visual programming and I'm facing a problem in winform that is I want to make the textBox accepts numbers only when a checkBox is checked ... the problem is that I know how to use the code inside KeyPress event but it doesn't work with the idea of checkBox.
I have this code:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if(char.IsLetter(e.Keychar))
{
e.Handled = true;
}
}
Now the question is how to make this happens when a checkBox is checked???
on your key press event you could do:
if (this.checkBoxNumericOnly.Checked)
{
//your code to only allow numerics...
}
Thanks to all of you ..
I wrote this code to enter numbers but only one dot '.' and it works finally ... thanks a lot for help
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (this.checkBox1.Checked)
{
e.Handled = !char.IsDigit(e.KeyChar)&&(e.KeyChar != '.') && !char.IsControl(e.KeyChar);
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
}
}
Use the MaskedTextBox control and handle the checkbox event to change the mask property
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if(checkBox1.Checked == true)
{
maskedTextBox1.Mask = "000-000-0000";
}
else
{
maskedTextBox1.Mask = null;
}
}
Simply try this in your TextBox's keypress event :
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if(this.checkBox1.Checked)
{
//Allow only number
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
}

WPF TextBox event

I have a textbox and I need the user to enter only Cyrillic letters. User can't enter numbers and special characters (except space) and latin characters! The Value of variable "l" I will set by myself.
How can I make the KeyDown event to do this?
In WindowsForms I do it like this:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char l = e.KeyChar;
if ((l < 'А' || l > 'я') && l != '\b' )
{
e.Handled = true;
}
}
The most simple way I discovered is to leverage the OnPreviewTextInput event:
Markup:
<TextBox PreviewTextInput="UIElement_OnPreviewTextInput" />
Handler:
private void UIElement_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
bool isCyrillic = Regex.IsMatch(e.Text, #"\p{IsCyrillic}");
e.Handled = !isCyrillic;
}

How do I suppress the noise associated with pressing RETURN in a textbox?

I have read that I can suppress this noise by defining a form accept button, which is something I am trying to avoid (I can point it at a hidden or inactive button I suppose, but since it's not explicitly what I'm trying to do, I'm concerned about side effects)
I use the following snippet to trap the return key and it works just fine, the noise does not occur if I click the button manually.
private void urlTextBox_KeyDown(object sender, KeyEventArgs e) {
if ( e.KeyCode == Keys.Return )
//if ( e.KeyValue.Equals(13) )
{
e.SuppressKeyPress = true;
//e.Handled = true;
goButton.PerformClick();
}
I am targetting .NET 4.0 so I should be able to implement most ideas.
Give this a shot:
private void urlTextBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
e.SuppressKeyPress = true;
}
}
private void urlTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
{
e.Handled = true;
goButton.PerformClick();
}
}
Source
It may also work with the KeyDown event but I haven't tested it.

c# windows forms capital letters

My user can enter some text into the combobox but I wish that this text is automatically shown in capital letters (as if user had capslock on). Any ideas how to do this?
You will want to handle the KeyPress event.
private void ComboBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar >= 'a' && e.KeyChar <= 'z')
e.KeyChar -= (char)32;
}
32 is just the difference in ASCII values between lowercase and uppercase letters.
Here is how I handled it, it gives a much smoother change than simply replacing the whole text.
private void ComboBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsLetter(e.KeyChar))
{
int p = this.SelectionStart;
this.Text = this.Text.Insert(this.SelectionStart, Char.ToUpper(e.KeyChar).ToString());
this.SelectionStart = p + 1;
}
}
another example
private void TextBox_Validated(object sender, EventArgs e)
{
this.TextBox.Text = this.TextBox.Text.ToUpper();
}
Regards
You can register to the TextChanged event and convert the text to capitals.
private void combobox_TextChanged(object sender, EventArgs e)
{
string upper = combobox.Text.ToUpper();
if(upper != combobox.Text)
combobox.Text = upper;
}

Categories

Resources