2011-12-14 10 views
3

私がしようとしているのは、10個のテキストボックスすべてに連続して入力できるようにすることです。私は最初のものから始まり、3文字がタイプされた後にフォーカスを次へと変え、3文字の後にフォーカスを入れた。TextChangedの使用中に入力を入力する前にフィールドをクリアするには?

私はその部分を行っていますが、すでに2番目のテキストボックスにテキストがある場合はどうなりますか? Clear()を試してみましたが、1文字以上入力できないバグがあります。

したがって、すべてのテキストボックスが迷惑データで埋められると、最初のテキストボックス123で入力を開始すると、2番目のテキストボックスに移動します。次のフィールドは最初にクリアされます。

私はこれで動作するようにしようとしています:

public PingIPRange() 
    { 
     InitializeComponent(); 

     txtF1.TextChanged += new EventHandler(NextField); 
     txtF2.TextChanged += new EventHandler(NextField); 
     txtF3.TextChanged += new EventHandler(NextField); 
     txtF4.TextChanged += new EventHandler(NextField); 

     txtT1.TextChanged += new EventHandler(NextField); 
     txtT2.TextChanged += new EventHandler(NextField); 
     txtT3.TextChanged += new EventHandler(NextField); 
     txtT4.TextChanged += new EventHandler(NextField); 

     txtInterval.TextChanged += new EventHandler(NextField); 
     txtRepeat.TextChanged += new EventHandler(NextField); 
    } 

    private void NextField(object sender, EventArgs e) 
    { 
     if (txtF1.TextLength == 3) 
     { 
      txtF2.Focus();    
     } 
     if (txtF2.TextLength == 3) 
     { 
      txtF3.Focus(); 
     } 
     if (txtF3.TextLength == 3) 
     { 
      txtF4.Focus(); 
     } 
     if (txtF4.TextLength == 3) 
     { 
      txtT1.Focus(); 
     } 
     if (txtT1.TextLength == 3) 
     { 
      txtT2.Focus(); 
     } 
     if (txtT2.TextLength == 3) 
     { 
      txtT3.Focus(); 
     } 
     if (txtT3.TextLength == 3) 
     { 
      txtT4.Focus(); 
     } 
     if (txtT4.TextLength == 3) 
     { 
      txtInterval.Focus(); 
     } 
     if (txtInterval.TextLength == 3) 
     { 
      txtRepeat.Focus(); 
     } 
     if (txtRepeat.TextLength == 3) 
     { 
      btnPing.Focus(); 
     } 
    } 
} 
+0

この目的は何ですか?あなたはボックスの束を入力して、次にbtnPingに焦点を当てるつもりです。これらのすべてのボックスに何かのping結果を設定しようとしていて、再度pingを呼び出すのですか? –

+0

@ Ryan Ternier:はい、テキストボックスの束にデータを入力してからフォーカスボタンを押したいと思います。私のコードではこれがうまくいきますが、すでにテキストボックスにデータがある場合は動作しません。私はすべてをクリアするボタンを避けるために努力しています:) – NewHelpNeeder

答えて

5

は、テキストボックスのためEnterイベントを追加し、テキストをSelectAllを行います。

txtF2.Enter += SelectTextOnEnter; 
txtF3.Enter += SelectTextOnEnter; 
// etc. 


private void SelectTextOnEnter(object sender, EventArgs e) { 
    ((TextBox)sender).SelectAll(); 
} 

また、あなたのNextFieldメソッドは、あなたが思っていることを全く行いません。このようにコードを変更してみてください、その後、TabIndex値が正しい順序になっているあなたのコントロールを確認してください:

private void NextField(object sender, EventArgs e) { 
    if (((TextBox)sender).Text.Length == 3) 
    this.SelectNextControl((Control)sender, true, true, false, false); 
} 

それは、フォームのタブオーダーに基づいて、次のコントロールを選択します。

+0

@NewHelpNeederいいえ、あなたが持っているコードを保持し、ちょうど私が持っているものを追加します。 – LarsTech

+0

いいえこれは、フィールドが入力されるたびに、テキストが選択されたことを意味します。 –

+0

@NewHelpNeeder TextBoxがフォーカスされると、Enterイベントが発生します。 TextBoxがフォーカスされたときにテキストを選択すると、キーを押すだけで、そこにあるものを上書きします。それはあなたの説明に基づいてあなたが望むことをすると思う。 – LarsTech

1

Focusメソッドを呼び出す前に、テキストボックスのTextプロパティを空の文字列に設定すると、あなたが望むことができると思います。

if (txtF1.TextLength == 3) 
{ 
    txtF2.Text = String.Empty; 
    txtF2.Focus(); 
} 
. 
. 
. 
関連する問題