none
Mit Keypress eventHandler Grenzen der Textboxeingabe anzeigen RRS feed

  • Frage

  • Hallo, ich möchte folgendes machen:

    Wenn der Benutzer der Form eine Eingabe in einer Textbox macht, soll unter der Textbox ein kleines Feld angezeigt werden, in diesem Feld sollen die Min Max grenzen stehen, welche eingegeben werden dürfen.

    Ich habe nun schon den keypresshandler soweit am laufen, aber wie bekomme ich nun das Feld dort hin? gibt es da soetwas wie eine textbox.info funktion, welche mir dann informationen zur Textbox ausgibt, oder müsste ich mir selber eine funktion schreiben, welche eine Label oder so aufblenden lässt?

    Freitag, 24. Dezember 2010 11:28

Antworten

Alle Antworten

  • hi,

    Ich würde einen Data Error Provider nutzen:

    http://msdn.microsoft.com/de-de/library/system.windows.forms.errorprovider.aspx


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Freitag, 24. Dezember 2010 11:36
  • Hallo B

    im KeyPress scheint mir dies etwas fehlplatziert,
    eine Variante wäre da vielleicht eher noch:
    ToolTip / QuickInfo
    http://msdn.microsoft.com/de-de/library/system.windows.forms.tooltip.aspx

    • Als Antwort markiert Bensen83 Freitag, 24. Dezember 2010 12:13
    Freitag, 24. Dezember 2010 11:49
  • Danke euch, genau das habe ich gesucht
    Freitag, 24. Dezember 2010 12:13
  • Hey, eine Frage habe ich noch. ;-)

    Wenn ich jetzt bevor ich z.B. aus den Eingaben der Textboxen eine csv erzeugen möchte überprüfen will, ob ein error vorliegt, wie mache ich das denn ? ich habe ja nur einen Error Handler. Müsste ich dann einen für jede Textbox haben? oder gibts da ne bessere Lösung? kann man den auch irgendwie textboxspezifisch auslesen?  

    Vielleicht einfach auf "" abfragen?
    Freitag, 24. Dezember 2010 12:31
  • B,

    mal ganz generell zum Thema 'Validierung':
    Validierung von Benutzereingaben in Windows Forms
    http://msdn.microsoft.com/de-de/library/ms229603.aspx

    Freitag, 24. Dezember 2010 12:40
  • OK, die Masked Textbox ist schon mal ein Guter Ansatz eine Falsche eingabe zu verhindern, kann ich denn von vorne herein grenzen festlegen? also beispielsweise  1000 -5000 oder so?
    Freitag, 24. Dezember 2010 13:21
  • Hallo B.,

    die Frage ist ja laut Deiner Markierung schon beantwortet, deswegen wird oft auch auf weitere Fragen diesbzgl. auch nicht mehr unbedingt geantwortet, weil diese "dann" eher in eine neue Frage gehören.

    Aber, da wir ja Weihnachten haben ;-)
    Zunächst sprichst Du von: "... eine falsche Eingabe zu verhindern [...]".
    Ich finde es zum Beispiel immer problematisch, dem Benutzer nicht anzuzeigen, was er gerade für eine Taste gedrückt hat. Der User wundert sich, versucht wahrscheinlich seine Tastatur zu reparieren oder ähnlich ;-) Ich würde die Taste ggf. noch anzeigen, aber dann eben noch einen deutlichen Hinweis, was daran falsch ist (z.B.: Zahl zu gross). Im Folgenden ein Beispiel für eine MaskedTextBox, die eine Bereichs-Prüfung durchführt. Ich würde aber eher sagen, so wirklich ist die MaskedTextBox in erweiterten Validierungs-Szenarien nicht geeignet - da liegst Du bei dynamischen erweiterten Validierungs-Anforderungen schon tatsächlich mit Deinem KeyPress (besser ggf. TextChanged) wirklich besser.
    Dennoch hier das Beispiel:

    // Zunächst eine MaskedTextBox, TextBox, ErrorProvider und einen ToolTip in die Form1 hinzufügen.

    using System;
    using System.Windows.Forms;
    
    namespace WinExpression
    {
     public partial class Form1 : Form
     {
      public Form1()
      {
       InitializeComponent();
       maskedTextBox1.Mask = "9999";
       maskedTextBox1.PromptChar = '0';
       maskedTextBox1.TextChanged += MaskedTextBox1_TextChanged;
       maskedTextBox1.ValidatingType = typeof(ZahlenBereichsValidationType);
       maskedTextBox1.TypeValidationCompleted += MaskedTextBox1_TypeValidationCompleted;
      }
    
      void MaskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
      {
       if (e.IsValidInput)
       {
        errorProvider1.SetError(sender as Control, "");
        toolTip1.SetToolTip(sender as Control, "");
        return;
       }
       e.Cancel = true;
       string meldung = e.Message;
       int indexColon = e.Message.IndexOf(':');
       if (indexColon != -1)
        meldung = e.Message.Substring(indexColon + 2);
       errorProvider1.SetError(sender as Control, meldung);
       toolTip1.SetToolTip(sender as Control, meldung);
       toolTip1.IsBalloon = true;
       toolTip1.Show(meldung, sender as Control, 2000);
      }
    
      void MaskedTextBox1_TextChanged(object sender, EventArgs e)
      {
       this.Validate();
      }
    
      private void Form1_FormClosing(object sender, FormClosingEventArgs e)
      {
       e.Cancel = false; // damit kann das Schliessen des Formulars erzwungen
       // werden, wenn der Benutzer es schliesst.<br/> 
       // ggf. vorher mit weiterer Logik den Gesamt-Validierungszustand prüfen.
      }
    
      /// <summary>Bereichs-ValidationType mit maximalem und minimalem Wert</summary>
      class ZahlenBereichsValidationType
      {
       static ZahlenBereichsValidationType()
       {
        MinWert = 1000; MaxWert = 5000;
        länge = MinWert.ToString().Length;
       }
    
       public static object Parse(string inhalt)
       {
        inhalt = inhalt.PadRight(länge, '0').PadLeft(länge, '0');
        double zahl; double.TryParse(inhalt, out zahl);
        if (zahl < MinWert || zahl > MaxWert)
         throw new Exception("Zahl muß zwischen " +
          MinWert + " und " + MaxWert + " liegen!");
        return inhalt;
       }
    
       /// <summary>Maximaler Wert des Bereiches</summary>
       public static int MaxWert { get; set; }
    
       /// <summary>Minimaler Wert des Bereiches</summary>
       public static int MinWert { get; set; }
    
       private static int länge;
      }
     }
    }
    

    Das Thema war ja schon hier angesprochen:

    [Nur bestimmte Eingaben in Textbox zulassen]
    http://social.msdn.microsoft.com/Forums/de-DE/visualcsharpde/thread/74253950-3e76-4284-885c-f4573fa9cf6e

    Die Links aus meinem dortigen Posting treffen insofern auch weiterhin zu:

    [Validierung von Benutzereingaben in Windows Forms]
    http://msdn.microsoft.com/de-de/library/ms229603.aspx

    [Beispiel-Validierung mit dem ErrorProvider]
    http://dzaebel.net/ValidationExample.htm 


    ciao Frank
    Samstag, 25. Dezember 2010 13:13