Reputation: 31
I am trying to prevent some characters from being uppercase, while all others has to be.
For an example if I write something in the textbox, it automatically writes all characters uppercase, but everytime I enter the letter "k" it has to be lowercase.
Does any one know a way of achieving this?
private void textBox3_TextChanged(object sender, EventArgs e)
{
// Navn/Name Text Box
}
Upvotes: 0
Views: 2152
Reputation: 598
Lastly, you save the new string, and return the caret to its position.
private static bool CalculateConditionForLowerCase(string stringLetter)
{
return stringLetter.ToLower() == "k";
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
return;
}
var caretPosition = textBox1.SelectionStart;
var sb = new StringBuilder();
foreach (var letter in textBox1.Text)
{
var stringLetter = letter.ToString();
sb.Append(CalculateConditionForLowerCase(stringLetter) ? stringLetter.ToLower() : stringLetter.ToUpper());
}
textBox1.Text = sb.ToString();
textBox1.SelectionStart = caretPosition;
}
Upvotes: 0
Reputation: 3541
If you dont want to allow the user to enter invalid input, you can use the TextChanged event (other answers) or handle the KeyDown and KeyUp events. Check this link for that other approach.
https://msdn.microsoft.com/en-us/library/ms171537(v=vs.110).aspx
Upvotes: -1
Reputation: 43886
In your textBox3_TextChanged
event handler you can simply "correct" the text and set it back.
You'll have to remember the cursor position (and selection) so that the user does not get interrupted while typing:
private void textBox3_TextChanged(object sender, EventArgs e)
{
int start = textBox3.SelectionStart;
int length = textBox3.SelectionLength;
textBox3.Text = textBox3.Text.ToUpper().Replace("K", "k");
textBox3.SelectionStart = start;
textBox3.SelectionLength = length;
}
Note: this is for Windows.Forms. I guess for wpf or asp or other ui frameworks the part with the cursor handling will differ.
Upvotes: 4
Reputation: 45947
Here one approach
private void textBox3_TextChanged(object sender, EventArgs e)
{
textBox3.Text = new string(textBox3.Text.Select(x => x == 'k' || x == 'K' ? 'k' : char.ToUpper(x)).ToArray());
}
Upvotes: 3