none
EditBox auf "Number" setzen RRS feed

  • Frage

  • Ich habe in C# jetzt angefangen mit Windows Forms rum zu Probieren. Ich habe eine EditBox die nur Zahlen enthalten soll. Mein Problem ist wie mache ich das, das der Benutzer nur Zahlen eingaben kann, am besten natürlich mit Komma. Gibt es da eine Eigenschaft dafür? Ich habe nämlich leider keine gefunden.
    VisualCPlusPlus
    Mittwoch, 30. November 2011 13:27

Antworten

  • Hallo,

    meinen Sie eine TextBox? Eine EditBox-Control gibt es meines Wissens nach nicht unter Windows Forms.

    Unter [1] ist beschrieben wie man eine TextBox validieren kann, um zum Beispiel nur Zahlen zu zulassen. Unter [2] ist noch ein konkreteres Beispiel.

    [1] http://msdn.microsoft.com/de-de/library/system.windows.forms.control.validating.aspx

    [2] http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/TextBoxvalidation.htm

    Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.

    Viele Grüße,
    Thomas Fröhle
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen

    • Als Antwort markiert KK Senior Mittwoch, 30. November 2011 15:19
    Mittwoch, 30. November 2011 14:06
  • Sowas da?

     

            static void Main()
            {
                Form f = new Form();
                TextBox t = new TextBox();
                f.Controls.Add(t);
    
                t.KeyPress += new KeyPressEventHandler(t_KeyPress);
                Application.Run(f);
                //Console.Read();
            }
    
            static void t_KeyPress(object sender, KeyPressEventArgs e)
            {
                if ((e.KeyChar >= '0' && e.KeyChar <= '9')
                    || e.KeyChar.ToString() == System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
                    )
                {
                }
                else
                {
                    e.Handled = true;
                }
            }
    

    • Als Antwort markiert KK Senior Mittwoch, 30. November 2011 15:19
    Mittwoch, 30. November 2011 14:02
  • Hatte ich mich beim Coden auch gefragt:

            static void t_KeyPress(object sender, KeyPressEventArgs e)
            {
                #region Method head
                if (Char.IsControl(e.KeyChar)) return;
                var t = sender as TextBox;
                var keyAsString = e.KeyChar.ToString();
                var currentText = t.Text;
                #endregion
    
                #region Create Assumption, how text would look like in future
                string newText = currentText;
                if (t.SelectionLength > 0)
                    newText = currentText.Remove(t.SelectionStart,t.SelectionLength);
                newText = newText.Insert(t.SelectionStart, keyAsString);
                #endregion
    
                #region Check, if it is a parsable number
                double dummy;
                if (!double.TryParse(newText, out dummy))
                {
                    e.Handled = true;
                }
                #endregion
            }
    

    jetzt bleibt nur noch: Zahlen mit "E+9" einzugeben, geht nur mit Hilfe der Zwischenablage...

     

    • Als Antwort markiert KK Senior Mittwoch, 30. November 2011 15:19
    Mittwoch, 30. November 2011 15:07

Alle Antworten

  • Sowas da?

     

            static void Main()
            {
                Form f = new Form();
                TextBox t = new TextBox();
                f.Controls.Add(t);
    
                t.KeyPress += new KeyPressEventHandler(t_KeyPress);
                Application.Run(f);
                //Console.Read();
            }
    
            static void t_KeyPress(object sender, KeyPressEventArgs e)
            {
                if ((e.KeyChar >= '0' && e.KeyChar <= '9')
                    || e.KeyChar.ToString() == System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
                    )
                {
                }
                else
                {
                    e.Handled = true;
                }
            }
    

    • Als Antwort markiert KK Senior Mittwoch, 30. November 2011 15:19
    Mittwoch, 30. November 2011 14:02
  • Hallo,

    meinen Sie eine TextBox? Eine EditBox-Control gibt es meines Wissens nach nicht unter Windows Forms.

    Unter [1] ist beschrieben wie man eine TextBox validieren kann, um zum Beispiel nur Zahlen zu zulassen. Unter [2] ist noch ein konkreteres Beispiel.

    [1] http://msdn.microsoft.com/de-de/library/system.windows.forms.control.validating.aspx

    [2] http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/TextBoxvalidation.htm

    Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.

    Viele Grüße,
    Thomas Fröhle
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen

    • Als Antwort markiert KK Senior Mittwoch, 30. November 2011 15:19
    Mittwoch, 30. November 2011 14:06
  • Danke, ja ich habe eine TextBox gemeint. Ich habe es nun gemacht wie im Vorschlag von GreatVolk. Nun würde ich gerne noch die "Zurücktaste" wieder aktivieren, gibt es dafür auch ein bestimmtes char oder...? Und auserdem, wie kann ich verhindern das der Benutzer 2 Kommas eingibt?

    VisualCPlusPlus
    Mittwoch, 30. November 2011 14:58
  • Hatte ich mich beim Coden auch gefragt:

            static void t_KeyPress(object sender, KeyPressEventArgs e)
            {
                #region Method head
                if (Char.IsControl(e.KeyChar)) return;
                var t = sender as TextBox;
                var keyAsString = e.KeyChar.ToString();
                var currentText = t.Text;
                #endregion
    
                #region Create Assumption, how text would look like in future
                string newText = currentText;
                if (t.SelectionLength > 0)
                    newText = currentText.Remove(t.SelectionStart,t.SelectionLength);
                newText = newText.Insert(t.SelectionStart, keyAsString);
                #endregion
    
                #region Check, if it is a parsable number
                double dummy;
                if (!double.TryParse(newText, out dummy))
                {
                    e.Handled = true;
                }
                #endregion
            }
    

    jetzt bleibt nur noch: Zahlen mit "E+9" einzugeben, geht nur mit Hilfe der Zwischenablage...

     

    • Als Antwort markiert KK Senior Mittwoch, 30. November 2011 15:19
    Mittwoch, 30. November 2011 15:07
  • Gut, danke, damit wären meine Probleme gelöst.
    VisualCPlusPlus
    Mittwoch, 30. November 2011 15:19
  • Hallo,

    naja, da gibt es noch etwas wie Einfügen über die Zwischenablage,
    Vorzeichen, Dezimalkomma (oder -punkt je nach Kultur) ...

    Für einige Varianten siehe: http://stackoverflow.com/questions/508533/numeric-textbox

    Einfacher ist deswegen i. a. den Weg über die Validation zu wählen, auf den Thomas Fröhle in seinem Beitrag hinweist.
    Was man mit dem ErrorProvider kombinieren kann, um visuellee Hinweise für den Anwender zu haben.

    Gruß Elmar

    Mittwoch, 30. November 2011 16:20
    Beantworter