привет, я знаю, где мой код работает неправильно, но не знаю, как это исправить ...
в событии TextChanged я вызываю мою функцию проверки, которая выполняет (должна делать) следующее:
- удалить любой не буквенный символ
- преобразовать введенную букву в верхний регистр
- разрешить только один символ в текстовом поле
- используйте SendKeys для увеличения индекса вкладки (переход к следующему текстовому полю)
проблема в том, что это происходит в событии с измененным текстом, я пытаюсь бороться с ним, чтобы не допустить двойного табуляции (что он и делает). потому что, если я перешагну, введенная начальная буква является первым событием с измененным текстом, то, если это незнаковый символ, функция вызывается снова, но если это буква, ToUpper может изменить ее снова, поэтому вкладка отправляется дважды , есть идеи? я знаю, что есть способ сделать это, не устанавливая некоторые сложные bools ....
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}");
}
}