2016-05-11 16 views
0

Ich versuche, die Menge eines bestimmten Zeichens (in meinem Fall ein Komma (,)) in meinem Textfeld zu begrenzen. Ich möchte, dass es maximal 9 Kommas in der Textbox erlaubt. Wenn der Benutzer versucht, mehr Kommas als 9 hinzuzufügen, sollte eine Meldung mit dem Fehler angezeigt werden und dem Benutzer dann nicht mehr in das Textfeld eingeben.C# - bestimmte Zeichen in Textfeld beschränken

In meiner Anwendung erlaube ich dem Benutzer, 10 Tags zu einem Textfeld durch Kommas getrennt hinzuzufügen.

Ein Beispiel Eingabe durch den Benutzer könnte wie folgt aussehen: summer,sexy,hot,beautiful,girls,guys,food,music,funny,lol

, dass die maximale Grenze von Tags in der Textbox (9 Kommata) erlaubt ist. Und wenn sie diese Grenze erreichen, sollte es sie davon abhalten, weitere Kommas zu tippen. Ich hoffe, ich war klar genug.

Hier ist mein Code so weit. Mein Textfeld heißt 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); 
      } 
     } 

Ich schaffte es nur die Meldungsbox erscheinen zu lassen. Aber wie verhindere ich, dass sie mehr Kommas eintippen?

+1

Verwendung KeyPress Ereignis oder KeyUp-Ereignis statt Textchanged-Ereignis tun sollten. Wenn dann im KeyPress/KeyUp-Ereignis das aktuelle Komma bereits 9 ist und das aktuelle Zeichen, das gedrückt wird, ein Komma ist, können Sie das Ereignis abbrechen, wenn das Kommazeichen verboten ist. –

+0

Wenn Sie ein benutzerdefiniertes Steuerelement erstellen, das von 'Textbox 'erbt, können Sie den keypressed Handler außer Kraft setzen und ignorieren, wenn Ihr Limit überschritten ist. – MDK

+0

Okay, ich werde es stattdessen in KeyPress ändern. Aber wie storniere/ignoriere ich die Schlüssel? (Ich möchte immer noch, dass der Benutzer DELETE drücken kann, um die aktuellen 10 Tags zu entfernen/zu bearbeiten). Ich will einfach nicht zulassen, dass sie nach einem 9. Komma mehr hinzufügen. –

Antwort

0

Es sollte wie folgt aussehen:

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

Hat nicht funktioniert. Zuerst änderte ich es in count == 9 statt count> 9, da es 10 Kommas mit deinem Code erlaubte. (Sollte maximal 10 Tags und maximal 9 Kommas sein). Dann erschien die Nachrichtenbox an der richtigen Stelle. Aber nachdem ich in der Nachrichtenbox auf "OK" geklickt habe, konnte ich immer noch weitere Tags und Nachrichtenboxen eingeben, die gerade auftauchten. Also das war fast die Lösung, aber immer noch nicht funktioniert:/ –

+0

Ich sehe, Sie haben es in e.Handled geändert = wahr; unten. Nachdem ich das getan habe, erlaubte es mir überhaupt nichts zu schreiben –

+0

Sie können die TextBox deaktivieren, aber Sie sollten eine Schaltfläche wieder aktivieren. –

0

Ich glaube, Sie so etwas wie dieses

Public class TagTextBox : TextBox 
    { 
     Public override OnKeyDown(object sender, KeyEventArgs args) 
     { 
      // Do logic here 
      // Call this to accept Key 
      base.OnKeyDown(sender, args); 
     } 
    } 
Verwandte Themen