2012-02-07 6 views
0

一度検証テキストボックスのテキストとTextChangedイベントに...こんにちは私は私のコードが間違っている場合知っているが、それを修正する方法がわからない

をタブインデックスを増やし、私はありません、私の検証関数を呼び出します唯一

  • 利用のSendKeysにテキストボックス内の文字を許可する

    • 以外の文字の文字を削除大文字
    • に入力された文字を変換し、次の(行うことになっています)

    問題がテキスト変更イベントになっているので、私はそれを2回タビングするのを防ぐために戦おうとしています。最初に入力した文字が最初のtextchangedイベントであるため、それがnotallowed文字の場合は関数が再度呼び出されますが、文字の場合はToUpperが再び変更してタブが2回送られることがあります。何か案は?私の代わりにTABのキーの押下をシミュレートするためのSendKeysを使用して、あなたがタブ順序に次の表示制御を見つけ、に焦点を当てて呼び出すことができます

    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}"); 
          } 
         } 
    
  • 答えて

    1

    ....いくつかの複雑なboolsを設定せずにこれを行う方法があります知っていますそれ。このような何か:

    private void FocusOnNextVisibleControl(Control currentControl) 
    { 
        Form form = currentControl.FindForm(); 
        Control nextControl = form.GetNextControl(currentControl, true); 
        while (nextControl != null && !nextControl.Visible && nextControl != currentControl) 
        { 
         nextControl = form.GetNextControl(nextControl, true); 
        } 
        if (nextControl != null && nextControl.Visible) 
        { 
         nextControl.Focus(); 
        } 
    } 
    

    私は、このために推測FocusOnNextVisibleControl(T);

    +0

    SendKeys.Send("{TAB}");を置き換え、このメソッドを呼び出すために、私は次のテキストボックスの名前を参照する方法がわかりません。関数から私は、送信者をテキストボックスとして受け入れ、それをコントロールとして参照しています。最初のテキストボックスが 'textbox1'ならば、私は現在の設定を使ってフォーカスを' textbox2'に変更する方法を知らないのです。 – ikathegreat

    +1

    フォームのタブ順で次のコントロールにフォーカスする方法を示すために、私は自分の答えを編集しました。フォームにグループボックスや他のコンテナコントロールがある場合は、これを考慮に入れて上記のコードを変更する必要があります。 –

    +0

    muahahahaこれは完璧に動作します、ありがとう!!!!ビジネスに戻って.... – ikathegreat

    関連する問題