Frage

Ich bin ein MFC-Programmierer, der zu C # neu und ist auf der Suche nach einer einfachen Steuerung, die Nummerneingabe und die Bereichsprüfung ermöglicht.

War es hilfreich?

Lösung

Sehen Sie sich die "NumericUpDown" -Steuerung. Es Bereich Validierung hat, wird die Eingabe immer numerisch sein, und es hat diese raffinierten Inkrement / Dekrement-Tasten.

Andere Tipps

Ich hatte eine Steuerung zu implementieren, die nur Zahlen akzeptiert, ganze Zahlen oder reelle Zahlen. I bauen die Steuerung als eine Spezialisierung von (lies: abgeleitet von) Textboxsteuerelement und unter Verwendung von Eingabesteuerung und eine regelmäßige expresión zur Validierung. Hinzufügen Bereich Validierung ist furchtbar einfach.

Dies ist der Code für die Regex zu bauen. _numericSeparation ist eine Zeichenkette mit Zeichen wie Komma Werte akzeptiert (Zum Beispiel ein oder a '' '': $ 10.50 10,50 €

private string ComputeRegexPattern()
{
   StringBuilder builder = new StringBuilder();
   if (this._forcePositives)
   {
       builder.Append("([+]|[-])?");
   }
   builder.Append(@"[\d]*((");
   if (!this._useIntegers)
   {
       for (int i = 0; i < this._numericSeparator.Length; i++)
       {
           builder.Append("[").Append(this._numericSeparator[i]).Append("]");
           if ((this._numericSeparator.Length > 0) && (i != (this._numericSeparator.Length - 1)))
           {
               builder.Append("|");
           }
       }
   }
   builder.Append(@")[\d]*)?");
   return builder.ToString();
}

Der reguläre Ausdruck entspricht eine beliebige Anzahl (das heißt eine beliebige Zeichenfolge mit numerischen Zeichen) mit nur einem Zeichen als numerische Trennung, und einem ‚+‘ oder einen ‚-‘ optional Zeichen am Anfang des Strings. Sobald Sie die regex (wenn Instanziierung der Control) erstellen, überprüfen Sie, ob der Wert korrekt ist die OnValidating Methode überschrieben. CheckValidNumber () gilt nur die Regex auf eingesetzten Text. Wenn die Regex ausfällt, aktiviert einen Fehler Anbieter mit einem angegebenen Fehler (Set mit Validation öffentlichem Eigentum) und wirft ein Validation Ereignis. Hier können Sie die Prüfung tun, um zu wissen, ob die Zahl im requiered Bereich liegt.

private bool CheckValidNumber()
{
   if (Regex.Match(this.Text, this.RegexPattern).Value != this.Text)
   {
       this._errorProvider.SetError(this, this.ValidationError);
       return false;
   }
   this._errorProvider.Clear();
   return true;
}

protected override void OnValidating(CancelEventArgs e)
{
   bool flag = this.CheckValidNumber();
   if (!flag)
   {
      e.Cancel = true;
      this.Text = "0";
   }
   base.OnValidating(e);
   if (!flag)
   {
      this.ValidationFail(this, EventArgs.Empty);
   }
}

Wie gesagt, ich auch verhindern, dass die Benutzer Eingabedaten in dem Textfeld anders als numerisches characteres der OnKeyPress methdod überschreibt:

protected override void OnKeyPress(KeyPressEventArgs e)
{
    if ((!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) && (!this._numberSymbols.Contains(e.KeyChar.ToString()) && !this._numericSeparator.Contains(e.KeyChar.ToString())))
    {
        e.Handled = true;
    }
    if (this._numberSymbols.Contains(e.KeyChar.ToString()) && !this._forcePositives)
    {
        e.Handled = true;
    }
    if (this._numericSeparator.Contains(e.KeyChar.ToString()) && this._useIntegers)
    {
        e.Handled = true;
    }
    base.OnKeyPress(e);
}

Die elegante Note: ich überprüfen, ob die Nummer gültig jedes Mal, wenn der Benutzer eine Taste loslässt, so dass die Nutzer-Feedback zu bekommen, wie er / sie Typen. (Aber denken Sie daran, dass Sie mit dem ValidationFail Ereignisse vorsichtig sein muss;))

protected override void OnKeyUp(KeyEventArgs e)
{
    this.CheckValidNumber();
    base.OnKeyUp(e);
}

Sie können eine normale Textbox und eine Validator Steuerung verwenden Eingang zu steuern.

Versuchen Sie, einen Fehler Provider-Control mit der Textbox zu validieren. Sie können mit int.TryParse () oder Double.TryParse () überprüfen, ob es numerisch und dann den Bereich überprüfen.

Sie können eine Kombination aus dem RequiredFieldValidator und CompareValidator (auf DataTypeCheck für den Bediener und Integer Settyps) verwenden

Das wird es mit einem normalen Textfeld, wenn Sie mögen, da sonst die Empfehlung über gut ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top