Frage

Ich muss in der Lage, die gültige Zeichen in einem Textfeld zu sperren, ich habe derzeit einen regulären Ausdruck, die ich jedes Zeichen gegen solche überprüfen wie

  

[A-Za-z]

würde sperren nur Alpha-Zeichen.

protected override void OnKeyPress(KeyPressEventArgs e)
{
  if (e.KeyChar == (char)Keys.Back)
  {
    base.OnKeyPress(e);
    return;
  }
  if (String.IsNullOrEmpty(this._ValidCharExpression))
  {
    base.OnKeyPress(e);
  }
  else
  {
    bool isValidChar = Regex.Match(e.KeyChar.ToString(),this._ValidCharExpression).Success;
    if (isValidChar)
    {
      base.OnKeyPress(e);
    }
    else
    {
      e.Handled = true;
    }
  }
}

ich den Regex-Code in dem OnKeyPress Code gesetzt hatte, aber ich wat all Sondertasten wie Strg-V, Strg-C und Rück ermöglichen, erlaubt zu werden.

Wie man sehen kann ich die Rücktaste gehandhabt haben. Allerdings Strg-V, zum Beispiel kann die Taste V, weil es einmal für die Strg-Taste läuft nicht, aber noch keine Modifikatoren Tasten sehen.

Was ist der beste Weg, um diese Situation zu bewältigen?

War es hilfreich?

Lösung

Sie können eine der Verwendung OnKeyPress / OnKeyUp / OkKeyDown Ereignisse und dann die Char.IsLetter Methode verwenden, um zu überprüfen, dass der eingegebene Schlüssel ist ein Brief.

Andere Tipps

MaskedTextBox kann das richtige für Sie.

Sie können auch auf die FilterTextBox über bei CodeProjct. Sie können es verwenden (oder der Ansatz beschrieben) zu tun, was Sie beabsichtigen. Die Grundidee ist die Änderung abzubrechen, bevor sie (über ein OnTextChanging Ereignis) sichtbar wird immer.

Was ist, wenn Sie die Validierung in OnTextChanged setzen statt OnKeyPress, aber jedes Mal, es geht Validierung Sie den Wert einer Variablen speichern? Dann können Sie zurück, wenn der Benutzer Pasten oder Typen eine falsche Zeichenfolge, sowie einige andere UI Hinweis geben, dass etwas ungültig war (zum Beispiel ein Label-Text gesetzt).

Warum Sie nicht die Prüfung auf gültige Zeichen in dem OnTextChanged Ereignisse setzen

und dann mit der Strg + C, Strg + V in der auf die wichtigsten befassen unten

Sie können auch die e.ModifierKeys verwenden == Keys.Control für Steuertasten zu testen

http://msdn.microsoft.com /en-us/library/system.windows.forms.keypresseventargs.aspx

Die Lösung, die ich gekommen sind mit ist die Schlüssel in der OnKeyDown Ereignis zu überprüfen und dann Setzen eines Flags, wenn die keypress behandelt werden sollen, die dann in der OnKeyPress Ereignis prüfen wird.

protected override void OnKeyDown(KeyEventArgs e)
 {
    Keys keyCode = (Keys)e.KeyValue;
    base.OnKeyDown(e);
    if ((e.Modifiers == Keys.Control) ||
       (e.Modifiers == Keys.Control) ||
       (keyCode == Keys.Back) ||
       (keyCode == Keys.Delete))
    {
      this._handleKey = true;
    }
    else
    {
      // check if the key is valid and set the flag
      this._handleKey = Regex.Match(key.ToString(), this._ValidCharExpression).Success;
    }
  }




protected override void OnKeyPress(KeyPressEventArgs e)
  {
    if (this._handleKey)
    {
      base.OnKeyPress(e);
      this._handleKey = false;
    }
    else
    {
      e.Handled = true;
    }
  }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top