Laden...

NumericTextBox Komponente

Erstellt von byte_schubser vor 14 Jahren Letzter Beitrag vor 14 Jahren 4.470 Views
B
byte_schubser Themenstarter:in
77 Beiträge seit 2008
vor 14 Jahren
NumericTextBox Komponente

Hallo zusammen,

wahrscheinlich gibt es schon Dutzende von spezialisierten Textboxen – trotzdem habe ich eine eigene gemacht.

NumericTextBox -so heißt das Teil- hat einige außergewöhnliche Eigenschaften.

  1. Prefilter von unzulässigen Eingabezeichen (property string AllowedCharacters).
  2. Darstellung wird über ein Format String gesteuert (property string FormatString).
  3. Numerische Zuweisung (property float Value).
  4. Min / Max für zentrale Validierung (properties float MinValue / MaxValue).
  5. ToolTip On MouseEnter (property bool ShowToolTipOnMouseEnter).
  6. Focus On Mouse Enter (property bool FocusOnMouseEnter).
  7. ToolTip On Focus Enter (property bool ShowToolTipsOnMouseEnter).
  8. Freier ToolTip Text mit 4 möglichen Parametern (property string ToolTipString).
  9. Einstellbare relative ToolTip Fenster Position (property Point ToolTipOffset).
  10. Event für Konvertierungsfehler.
  11. Event für Validierungsfehler mit Übergabe von MinValue / MaxValue.

Der ToolTipString wird als Format String behandelt und kann bis zu vier Parameter im Text einfügen.

Beispiel:
„Eingabe des Alters in Jahren.{0}Zulässige Eingabezeichen sind "{1}".{0}Der erlaubte Wertebereich ist {2} bis {3}“.

{0} bewirkt einen Zeilenumbruch in ToolTip Fenster.
{1} gibt den String AllowedCharacters aus.
{2} gibt den Wert MinValue aus.
{3} gibt den Wert MaxValue aus.

Das kleine Demoprojekt zeigt wie einfach die zentrale Validierung geht. Egal ob nur eine TextBox oder 100 TextBoxen, mit 7 Zeilen wird alles erschlagen.

private void ValueLimitError(object sender, NumericTextBoxControl.ValueLimitEventArgs e)
  {
    MessageBox.Show("Ungültiger Wertebereich. Zulässige Werte sind " + 
      e.MinValue.ToString() + " bis " + e.MaxValue.ToString(),
      "Fehler in Eigabefeld: " + (sender as TextBox).Name.ToString());
    (sender as TextBox).Focus();
  }

Genau so einfach funktioniert auch die Behandlung von Konvertierungsfehlern.

  private void ConversionError(object sender, EventArgs e)
  {
    MessageBox.Show("Konvertierungsfehler", "Fehler in Eigabefeld: " + 
      (sender as TextBox).Name.ToString());
    (sender as TextBox).Focus();
  }

Viel Erfolg damit

byte_schubser

B
byte_schubser Themenstarter:in
77 Beiträge seit 2008
vor 14 Jahren

und hier das VS2008 Projekt...

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo byte_schubser,

wahrscheinlich gibt es schon Dutzende von spezialisierten Textboxen

bestimmt, aber dein Projekt hat ein paar nette Features, die es sicher nicht überall gibt. Allerdings auch noch zumindest einen Fehler. Per Zwischenablage lässt sich beliebiger Text einfügen. Es ist grundsätzlich problematisch zu versuchen, eingabeseitig falsche Eingaben abzufragen. Zuverlässig bekommt man es nur mit TextChanged hin. Siehe dazu [FAQ] In einer TextBox nur bestimmte Zeichen/Eingaben zulassen.

herbivore

B
byte_schubser Themenstarter:in
77 Beiträge seit 2008
vor 14 Jahren

Hallo herbivore,

danke für Deinen Hinweis - den Artikel habe ich noch nicht gekannt. An die Zwischenablage habe ich auch nicht gedacht.

Bei Gelegenheit werde ich mal die Methode aus Deinem Artikel integrieren und das Projekt hier aktualisieren.

Grüße

byte_schubser