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;
}
Related
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);
}
}
I want to make a TextBox that doesn't allow entering spaces. I disabled typing spaces with the keyboard:
void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Space)
{
e.Handled = true;
}
}
But if the user copies a string with spaces like "Hello world", he can paste it into the TextBox and there will be spaces in it.
you can add a TextChanged Event Handler for your TextBox and add below code in that TextChanged event:
TextBox1.Text = TextBox1.Text.Replace(" ", "");
A better control approach
private void textBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) {
removeSpaces();
}
//Handle Ctrl+Ins
if (e.KeyCode == Keys.Control && e.KeyCode == Keys.Insert)
{
removeSpaces();
}
}
private void removeSpaces()
{
textBox.Text = textBox.Text.Replace(" ", string.Empty);
}
// To control Mouse Right click
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
textBox1.ContextMenu = new ContextMenu();
}
}
SIMPLE Solution for all
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text.Replace(" ", string.Empty);
}
A simple way is removing white space after entering data. Like:
txt_Box.Text = txt_Box.Text.Replace(" ","");
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;
}
}
}
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
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;
}