2011-12-14 3 views
4

私は4桁のフィールドに12桁の数字(IPアドレスですが、間にピリオドはありません)を貼り付けることができるようにしようとしています。それぞれの最大長は3です。TextChangedプロパティを使用して4つのテキストボックスに12桁の連続した数字を貼り付けるにはどうすればいいですか?

私はTextChange、テキストボックス、プロパティを使用してこれを行おうとしています。私はサブストリングを使用しようとしていましたが、それは各オクテットの作業ではありません。

public PingIPRange() 
    { 
     InitializeComponent(); 

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

    private void NextField(object sender, EventArgs e) 
    { 
     if (txtF1.TextLength == 3) 
     { 
      txtF2.Focus(); 
      txtF1.Text = txtF1.Text.Substring(0, 3); 
      txtF2.Text = txtF1.Text.Substring(3, 30); 
     } 
     if (txtF2.TextLength == 3) 
     { 
      txtF3.Text = txtF2.Text.Substring(3, 27); 
      txtF3.Focus(); 
     } 
     if (txtF3.TextLength == 3) 
     { 
      txtF4.Focus(); 
     } 
    } 
+0

良い質問 - 現在の入力が満杯になると、次のボックスにフォーカスが切り替わります。 – Paul

+1

あなたは '== 3'ではなく'> 3'でチェックしています。そして、実際には、3文字後に区切りたいとは限りませんが、 '.'が出現するたびに区切ります。 – CodesInChaos

+0

@CodeInChaos:これは1つのオプションですが、数字だけが必要です。 – NewHelpNeeder

答えて

4

このコードをNextFieldメソッドに入れてみてください。 txtF1テキストボックスのテキスト変更イベントにのみ接続できます。

TextBox txt = (TextBox) sender; 
var s1 = txt.Text.Split('.'); 

if(s1.Length==4) 
{ 
    txtF1.Text = s1[0]; 
    txtF2.Text = s1[1]; 
    txtF3.Text = s1[2]; 
    txtF4.Text = s1[3]; 
} 

UPDATE:あなたは、文字列like this

var s1=Enumrable 
    .Range(0,4) 
    .Select(i => txt.Text.Substring(i * 3, 3)) 
    .ToArray(); 
+0

これはすばらしい答えですが、私はちょうど数字のような外の記号で何かが必要です。私は似たようなことができるように道を知っていますが、3桁ごとに選んでいますか? – NewHelpNeeder

+1

'TextBox txt =(TextBox)sender;を追加します。 var s1 = txt.Text.Split( '。'); 'すべてのテキストボックスに貼り付けることができます。 – Reniuz

+0

@NewHelpNeederこれは何も記号を与えません。これは、物事を数字ではなく文字列として扱うためです。 – Maheep

2

これは、TextChangedハンドラ内でテキストを変更しようとするほどうまく機能しないため、再び自動的に起動します。長さが3のときに、イベントハンドラで次のボックスにフォーカスを移動させるだけでは、サイクリックループを回避できます。

1

は、それがTextF1に貼り付けます場合にのみ機能分割することができます任意のドット記号がないこと、質問を更新してきたように。

public PingIPRange() 
{ 
    InitializeComponent(); 

    txtF1.TextChanged += new EventHandler(PasteNumbers); 
} 

private void PasteNumbers(object sender, EventArgs e) 
{ 
    if (txtF1.TextLength > 9) { txtF4.Text = txtF1.Text.Substring(9, 3); } 
    if (txtF1.TextLength > 6) { txtF3.Text = txtF1.Text.Substring(6, 3); } 
    if (txtF1.TextLength > 3) 
    { 
     txtF2.Text = txtF1.Text.Substring(3, 3); 
     txtF1.Text = txtF1.Text.Substring(0, 3); 
    } 
} 

編集は、完全に正しいとは、あなたが間分行う必要があります(txtF1.TextLengthを - 9)とサブストリングの3持ってOutOfBound txtF4のための問題、およびtxtF3とtxtF2で同じしません。

+0

妥当と思われます。私は少しこれで試してみます。 – NewHelpNeeder

1

あなたはあなたtxtF1上keyUpイベントとのMouseUpイベントをできたし、次のコードを使用し

private void txtF1_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.V) 
     { 
      PasteText(); 
     } 
    } 

    private void txtF1_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Right && 
      ((TextBox)sender).Modified) 
     { 
      PasteText(); 
     } 
    } 

    private void PasteText() 
    { 
     string[] val = txtF1.Text.Split('.'); 

     txtF1.Text = val[0].ToString(); 
     txtF2.Text = val[1].ToString(); 
     txtF3.Text = val[2].ToString(); 
     txtF4.Text = val[3].ToString(); 
    } 

注:私はすべてのエラー処理を含めていません。

+0

マウス(contect menu-> Paste)オプションを使用してコードを実行すると、キーアップイベントが機能しません – Maheep

+0

Maheepで編集したコードをマウスで貼り付けることができます。 –

関連する問題