привет, я знаю, где мой код работает неправильно, но не знаю, как это исправить...
в событии TextChanged я вызываю свою функцию проверки, которая делает (должна делать) следующее:
- удалить любой небуквенный символ
- преобразовать введенную букву в верхний регистр
- разрешить только один символ в текстовом поле
- используйте SendKeys, чтобы увеличить индекс вкладки (перейти к следующему текстовому полю)
проблема в том, что, поскольку он находится в событии textchanged, я пытаюсь бороться с ним, чтобы предотвратить его двойное нажатие (что он и делает). потому что, если я прохожу, введенная начальная буква является первым событием изменения текста, тогда, если это недопустимый символ, функция вызывается снова, но если это буква, ToUpper может изменить ее снова, поэтому вкладка отправляется дважды . Любые идеи? я знаю, что есть способ сделать это, не устанавливая какие-то сложные логические значения....
private void validateTextInteger(object sender, EventArgs e)
{
TextBox T = (TextBox)sender;
try
{
//Not Allowing Numbers, Underscore or Hash
char[] UnallowedCharacters = { '0', '1','2', '3', '4', '5','6', '7','8', '9','_','#','%','$','@','!','&',
'(',')','{','}','[',']',':','<','>','?','/','=','-','+','\\','|','`','~',';'};
if (textContainsUnallowedCharacter(T.Text, UnallowedCharacters))
{
int CursorIndex = T.SelectionStart - 1;
T.Text = T.Text.Remove(CursorIndex, 1);
//Align Cursor to same index
T.SelectionStart = CursorIndex;
T.SelectionLength = 0;
}
}
catch (Exception) { }
T.Text = T.Text.ToUpper();
if (T.Text.Length > 0)
{
//how do i prevent this (or this function) from getting called twice???
SendKeys.Send("{TAB}");
}
}