2016-05-11 13 views
0

テキストボックス内の特定の文字(私の場合はカンマ(、))の量を制限しようとしています。テキストボックスに最大9カンマしか使えないようにしたい。ユーザーが9よりも多くのコンマを追加しようとすると、エラーのあるメッセージボックスが表示され、さらにユーザーがテキストボックスに入力できるようになります。c# - テキストボックス内で特定の文字を制限する

私のアプリケーションでは、カンマで区切られたテキストボックスに10個のタグを追加することができます。

ユーザによる例えば入力が次のようになり:summer,sexy,hot,beautiful,girls,guys,food,music,funny,lol

テキストボックス(9つのカンマ)で許可されるタグの最大限界です。 制限値に達すると、カンマを入力しなくなります。私は十分に明確であることを望む。

ここまでは私のコードです。私のテキストボックスはtagBoxと呼ばれています。

private void tagBox_TextChanged(object sender, EventArgs e) 
     { 
      // Allow max 10 tags in the tag box 
      string tags = tagBox.Text; 
      int count = tags.Split(',').Length - 1; 
      if (count > 9) 
      { 
       MessageBox.Show("Max 10 tags are allowed.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
      } 
     } 

私は、メッセージボックスを表示することしかできませんでした。しかし、どのようにしてより多くのカンマでタイピングするのをやめさせるのですか?

+1

使用KeyPressイベントまたはKeyUpイベントの代わりに、TextChangedイベントのようなものをやるべきだと思います。 KeyPress/KeyUpイベントで現在のカンマカウントがすでに9で、現在の文字がカンマの場合、カンマ文字は禁止されたイベントを取り消すことができます。 –

+0

'Textbox'から継承したカスタムコントロールを作成した場合は、キー入力されたハンドラをオーバーライドし、あなたの限界を超えた場合に無視することができます。 – MDK

+0

代わりにKeyPressに変更します。しかし、どのように私はキーをキャンセル/無視するのですか? (私はまだ、ユーザーが現在の10個のタグを削除/編集するためにDELETEを押すことができるようにしたい)。私はちょうどそれらが9番目のカンマの後にさらに追加できるようにしたくないです。 –

答えて

0

それは次のようになります。

private void tagBox_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 
    // Allow max 10 tags in the tag box 
    string tags = tagBox.Text; 
    int count = tags.Split(',').Length - 1; 
    if (count > 9 && e.KeyChar == ',') 
    { 
     e.Handled = true; 
     MessageBox.Show("Max 10 tags are allowed.", "Notice", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
    } 
    else   
     e.Handled = false; 
} 
+0

動作しませんでした。最初に、コードで10カンマを許可したので、count> 9ではなくcount == 9に変更しました。 (最大10タグ、最大9カンマ)。メッセージボックスが正しい場所に現れました。しかし、メッセージボックスで[OK]をクリックした後も、さらに多くのタグとメッセージボックスを入力するだけで、ポップアップが維持されます。だからそれはほとんど解決策でしたが、まだ動作しません:/ –

+0

私はあなたがそれをe.Handled = trueに変更したのを見ました。一番下に私はそれをした後、何も書き込むことができませんでした。 –

+0

あなたはtextBoxを無効にすることができますが、もう一度ボタンを有効にする必要があります。 –

0

私はあなたがこの

Public class TagTextBox : TextBox 
    { 
     Public override OnKeyDown(object sender, KeyEventArgs args) 
     { 
      // Do logic here 
      // Call this to accept Key 
      base.OnKeyDown(sender, args); 
     } 
    } 
関連する問題