こんにちは、コードのどこが間違っているかはわかっていますが、それを修正する方法がわかりません...
TextChanged イベントで、次のことを行う (行うはずの) 検証関数を呼び出します。
- 文字以外の文字を削除する
- 入力した文字を大文字に変換する
- テキスト ボックスに 1 文字のみを許可する
- SendKeys を使用してタブ インデックスを増やします (次のテキスト ボックスに移動します)。
問題は、それが textchanged イベントにあるためです。2回タブを押すのを防ぐために、私はそれと戦おうとしています(それはやっています)。ステップスルーすると、入力された最初の文字が最初の textchanged イベントであるため、許可されていない文字の場合、関数が再度呼び出されますが、文字の場合、ToUpper が再度変更されている可能性があるため、タブが 2 回送信されます。 . 何か案は?複雑なブール値を設定せずにこれを行う方法があることを知っています....
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}");
}
}