none
Prüfen des Inhaltes einer Textbox RRS feed

  • Frage

  • Hallo

    ich möchte gern Prüfen ob der Anwender in einer Textbox wirklich Zahlen (Doublewert) oder Buchstaben eingeben hat.

     If
            TextBox1.Text = String or Zahl2 = String Then TextBox = ("Bitte nur Zahlen eingeben !!")
    

    Ich Bitte um ein Code-Beispiel und eine Kurze Erklärung.

    Vielen Dank.


    Gruß Hilko
    Mittwoch, 28. September 2011 20:59

Antworten

  • Hallo Hilko,

    Dim MeineZahl As Double = 0
    
        If Not Double.TryParse( TextBox1.Text, MeineZahl ) Then
            MessageBox.Show( "Nur Zahlen eingeben!" )
        End if
    
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 28. September 2011 22:08
    Moderator
  • Hallo Hilko,

    danke für deine Hilfe, was ich jedoch nicht verstehe ist, warum den Double wert auf 0 setzen der kommt doch aus meiner Textbox.

    das muss man nicht so machen. Es reicht in dem Fall auch, die Variable nur zu deklarieren. Ich mache das gerne, da ich öfters Standardwerte setzen will und somit dann eine einheitlichere Schreibweise habe.

    Denn hätte ich noch eine grundsätzliche Frage zu VB.NET:

    --- Eine Klasse hat Member

    --- An Member übergibt man Eingenschaften in Klammern "()"

    "In Klammern"?

      Klasse.Eigenschaft = Wert

      Klasse.Methode()

      Klasse.Methode( Wert )

      Wert = Klasse.Methode()

      ...

    In unserem Code:

    Klasse - Double

    Member - TryParse

    Eigenschaft - TextBox1.Text, MeineZahl

     

    Richtig??

    Öhm. Nö. Du musst zwischen Eigenschaften und Methoden in Klassen unterscheiden. Bei Methoden wieder in Prozeduren (Sub) und Funktionen (Function). Letztere geben etwas zurück, erstere nicht.

    Class MeineKlasse
    
        Private _Text As String
    
        Public Property Text As String
            Get
                Return _Text
            End Get
            Set
                _Text = Value
            End Set
        End Property
    
        Public Sub MachTextLeer()
    
            Me.Text = String.Empty
    
        End Sub
    
        Public Function VerdoppeleText() As String
    
            Return Me.Text & Me.Text
    
        End Function
    
    End Class
    
    
      

    Gib es ein verzeichnis wo steht welche Klasse welche Member hat und was diese bewirken?

    Bitte hilf mir die zusammen hänge besser zu verstehen.

    Für die Standardklassen im .NET Framework gibt es die MSDN, da steht das. Für andere Klassen musst Du den Entwickler der Klasse fragen bzw. dessen Doku, wenn es eine gibt.

    Hier ein Beispiel für die System.String Klasse:

      http://msdn.microsoft.com/de-de/library/system.string.aspx

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 29. September 2011 12:20
    Moderator
  • Hallo Hilko,

    Alternativ hast Du die Möglichkeit nur bestimmte Zeichen durch zu lassen.
    Hier Zahlen, Backspace und Punkt.

        Private Sub txtBetrag_KeyPress(sender AsObject, e As System.Windows.Forms.KeyPressEventArgs) Handles txtBetrag.KeyPress
    
            Dim sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
    
            If Not ((e.KeyChar >= "0"c And e.KeyChar <= "9"c) Or e.KeyChar = Convert.ToChar(8) Or (e.KeyChar = sep And txtBetrag.Text.IndexOf(sep) = -1)) Then
                'Nur Max 1 Seperator zulassen
                e.KeyChar = ChrW(0)
            End If
    
        End Sub

     Gruss Peter

    Donnerstag, 29. September 2011 05:25

Alle Antworten

  • Hallo Hilko,

    Dim MeineZahl As Double = 0
    
        If Not Double.TryParse( TextBox1.Text, MeineZahl ) Then
            MessageBox.Show( "Nur Zahlen eingeben!" )
        End if
    
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 28. September 2011 22:08
    Moderator
  • Hallo Hilko,

    Alternativ hast Du die Möglichkeit nur bestimmte Zeichen durch zu lassen.
    Hier Zahlen, Backspace und Punkt.

        Private Sub txtBetrag_KeyPress(sender AsObject, e As System.Windows.Forms.KeyPressEventArgs) Handles txtBetrag.KeyPress
    
            Dim sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
    
            If Not ((e.KeyChar >= "0"c And e.KeyChar <= "9"c) Or e.KeyChar = Convert.ToChar(8) Or (e.KeyChar = sep And txtBetrag.Text.IndexOf(sep) = -1)) Then
                'Nur Max 1 Seperator zulassen
                e.KeyChar = ChrW(0)
            End If
    
        End Sub

     Gruss Peter

    Donnerstag, 29. September 2011 05:25
  • Hallo Stefan,

    danke für deine Hilfe, was ich jedoch nicht verstehe ist, warum den Double wert auf 0 setzen der kommt doch aus meiner Textbox.

    Denn hätte ich noch eine grundsätzliche Frage zu VB.NET:

    --- Eine Klasse hat Member

    --- An Member übergibt man Eingenschaften in Klammern "()"

     

    In unserem Code:

    Klasse - Double

    Member - TryParse

    Eigenschaft - TextBox1.Text, MeineZahl

     

    Richtig??

    Gib es ein verzeichnis wo steht welche Klasse welche Member hat und was diese bewirken?

    Bitte hilf mir die zusammen hänge besser zu verstehen.

     


    Gruß Hilko
    Donnerstag, 29. September 2011 10:18
  • Hallo Hilko,

    danke für deine Hilfe, was ich jedoch nicht verstehe ist, warum den Double wert auf 0 setzen der kommt doch aus meiner Textbox.

    das muss man nicht so machen. Es reicht in dem Fall auch, die Variable nur zu deklarieren. Ich mache das gerne, da ich öfters Standardwerte setzen will und somit dann eine einheitlichere Schreibweise habe.

    Denn hätte ich noch eine grundsätzliche Frage zu VB.NET:

    --- Eine Klasse hat Member

    --- An Member übergibt man Eingenschaften in Klammern "()"

    "In Klammern"?

      Klasse.Eigenschaft = Wert

      Klasse.Methode()

      Klasse.Methode( Wert )

      Wert = Klasse.Methode()

      ...

    In unserem Code:

    Klasse - Double

    Member - TryParse

    Eigenschaft - TextBox1.Text, MeineZahl

     

    Richtig??

    Öhm. Nö. Du musst zwischen Eigenschaften und Methoden in Klassen unterscheiden. Bei Methoden wieder in Prozeduren (Sub) und Funktionen (Function). Letztere geben etwas zurück, erstere nicht.

    Class MeineKlasse
    
        Private _Text As String
    
        Public Property Text As String
            Get
                Return _Text
            End Get
            Set
                _Text = Value
            End Set
        End Property
    
        Public Sub MachTextLeer()
    
            Me.Text = String.Empty
    
        End Sub
    
        Public Function VerdoppeleText() As String
    
            Return Me.Text & Me.Text
    
        End Function
    
    End Class
    
    
      

    Gib es ein verzeichnis wo steht welche Klasse welche Member hat und was diese bewirken?

    Bitte hilf mir die zusammen hänge besser zu verstehen.

    Für die Standardklassen im .NET Framework gibt es die MSDN, da steht das. Für andere Klassen musst Du den Entwickler der Klasse fragen bzw. dessen Doku, wenn es eine gibt.

    Hier ein Beispiel für die System.String Klasse:

      http://msdn.microsoft.com/de-de/library/system.string.aspx

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 29. September 2011 12:20
    Moderator
  • Hallo Peter,
     
    Am Thu, 29 Sep 2011 05:25:51 +0000 schrieb peter haus:
     
    >
    > Alternativ hast du due Möglichkeit nur bestimmte Zeichen durch zu lassen.
    > Hier Zahlen, Backspace und Punkt.
    >
    > Private Sub txtBetrag_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles
    > txtBetrag.KeyPress
    >...
    > End Sub
    >
     
    ich mache das auch an manchen Stellen ganz gerne so, aber nur für bestimmte
    Aktionen.
    Bedenken sollte man nämlich: Der Anwender kann immer noch über die
    Zwischenablage beliebigen 'Müll' einfügen!
     
    Ciao,
    Georg
     
    Donnerstag, 29. September 2011 14:04
  • Hallo Stefan,

    nochmal vielen Dank für Deine Erklärung, das heist eine Klasse kann Prozeduren und / oder Methoden und / oder Funktionen enthalten?

    Gib mir Bitte noch ein Beispiel zu:

    - Funktionen (zb. Mathematische-Berechnungen)

    - Prozeduren

    - Methoden

    für welche Programm-Abläufe verwende ich welche art?

    Oder das unterscheidet Methoden, Prozeduren und Funktionen.

    Bitte entschuldige, meine in Deinen Augen sicher dummen Fragen, ich hoffen das du mir nochmal hilfst.

     

     


    Gruß Hilko
    Donnerstag, 29. September 2011 14:14
  • Hallo Hilko.
    das heist eine Klasse kann Prozeduren und / oder Methoden und / oder Funktionen enthalten?

    Methoden wird als Oberbegriff für Prozeduren und Funktionen verwendet. In VB.NET hast Du hier auch eine Unterscheidung in der Syntax.

    Sub -> Prozedur
    Function -> Funktion

    In C# gibt es eine solche Unterscheidung mit separaten Schlüsselworten nicht.

    public void MachWas() -> Prozedur
    public int MachWas() -> Function

    Gib mir Bitte noch ein Beispiel zu:

    - Funktionen (zb. Mathematische-Berechnungen)

    - Prozeduren

    - Methoden

    Streich "Methoden", was das bedeutet, steht oben.

    Jeweils ein Beispiel findest Du in meinem vorigen Post. Wenn Du eine Rückgabe brauchst, schreibst Du eine Funktion

      Public Function Irgendwas() As String

      End Function

    Wenn Du keine Rückgabe brauchst, die Methode (bzw. Prozedur) also bspw. nur etwas erledigt, was nach außen hin nicht wieder benötigt wird, schreibst Du eine Prozedur:

      Public Sub Irgendwas()

      End Sub

    Bitte entschuldige, meine in Deinen Augen sicher dummen Fragen, ich hoffen das du mir nochmal

    Es gibt keine dummen Fragen, nur dumme Antworten. Ich hoffe aber, dass meine Antwort dir hilft :)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 29. September 2011 15:06
    Moderator
  • Hallo Stefan,

    nochmals vielen Dank für Deine Erklärungen, ich denke ich bin den Zusammenhängen ein ganzes Stück neher gekommen.

    Wenn ich mir vorstelle das jemand wie Du die gesamte .NET Klassenbiblotek im Kopf hat, dann weis ich das ich noch einen weiten Weg

    vor mir habe.

    Ich möcht Dich deshalb Fragen ob Du bereit werst mit mir über teamvier und Telefon oder Skype mir zb einmal in der Wochen zu helfen, mit mir Codebeispiele

    durch gehst oder/und mir meine Fragen beantwortest.

    Bis ich einen gewissen Level erreicht habe ab dem es mir dan leichter fält mir weiteres Wissen einzueignen.

     


    Gruß Hilko
    Freitag, 30. September 2011 16:41
  • Hallo Hilko,

    Wenn ich mir vorstelle das jemand wie Du die gesamte .NET Klassenbiblotek im Kopf hat

    ganz sicher nicht :) Bei Classic ASP kannte ich früher jede Klasse, Methode, ... mit Vornamen. Beim .NET Framework geht das so gut wie gar nicht, dafür ist das doch erheblich zu umfangreich.

    Wichtig ist nur, dass man sich in etwa mit den Strukturen des .NET Frameworks auskennt und die Namespaces zuordnen kann. Also bspw. System.Net -> Netzwerk, System.IO -> Dateizugriffe, Streams, ...

    Das lernt man aber mit der Zeit.

    Ich möcht Dich deshalb Fragen ob Du bereit werst mit mir über teamvier und Telefon oder Skype mir zb einmal in der Wochen zu helfen, mit mir Codebeispiele durch gehst oder/und mir meine Fragen beantwortest.

    Wie letztens schon geschrieben biete ich das zwar schon entgeltlich an, derzeit habe ich aber leider keine Zeit. Daher muss ich dich da leider enttäuschen. Nächstes Jahr evtl. (falls meine Kunden gnädig sind^^)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Freitag, 30. September 2011 19:01
    Moderator
  • Hallo Stefan

    ich möchte eine "oder Prüfung" machen, (C#)

    if (var_von < 1) | (var_von > 1000); 
                MessageBox.Show("Bitte nur Werte Zwischen 1 und 1000 eingeben!!");
    

    und der vertikale Strich wird mir als Fehler markiert, was mach ich falsch?

    (Fehler:Fehler 1 Ungültiger Ausdruck "|".)


    Gruß Hilko
    Donnerstag, 6. Oktober 2011 14:41
  • Hallo Hilko,

    ich möchte eine "oder Prüfung" machen, (C#)

    if (var_von < 1) | (var_von > 1000); 
                MessageBox.Show("Bitte nur Werte Zwischen 1 und 1000 eingeben!!");
    

    und der vertikale Strich wird mir als Fehler markiert, was mach ich falsch?

    Du vermischst VB und C#. Die Syntax ist aber grundlegend unterschiedlich.

    Wie im C# Forum von einem anderen User bereits geschrieben, musst Du in C# || (also zwei Pipe Zeichen) schreiben. Dann sollte das auch funktionieren.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 6. Oktober 2011 23:23
    Moderator
  • Hi Stefan,
    2 Pipe-Zeichen in C#.NET entsprechen dem OrElse in VB.NET. Ein Pipe-Zeichen in C#.NET ist das einfache Or, bei dem alle Teilausdrucke berechnet werden, egal, ob das weiter sinnvoll ist.
     
    --
    Viele Gruesse
    Peter
    Freitag, 7. Oktober 2011 17:59
  • Ich kannte zwar den Unterschied zwischen | und || noch nicht (mal wieder was nebenbei gelernt :-) ...

    Allerdings ist der Ausdruck so auch nicht korrekt.

    if (var_von < 1) | (var_von > 1000); 
                MessageBox.Show("Bitte nur Werte Zwischen 1 und 1000 eingeben!!");
    
    Richtiger wäre es AFAIK so:
    if ((var_von < 1) | (var_von > 1000)) MessageBox.Show("....");
    Soweit ich weiß, müssen bei IF um den gesamten Ausdruck Klammern herum, und bei einer einfachen Anweisung (also keinem kompletten Anweisungsblock innerhalb von geschweiften { } Klammern) die Anweisung direkt dahinter, ohne ein Semikolon davor. Nur dahinter muss eines.
    Angaben ohne Gewähr ... ich schreibe einfach zu selten C# um wirklich sicher zu sein. :-)
    LG, Dennis.
    Freitag, 14. Oktober 2011 14:35
  • Hallo Hilko Schraivogel,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.

    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Immer für eine Neue Frage einen Neuen Thread aufmachen.

    Grundsätzlich ist zu jedem neuen Thema ein eigener Thread zu öffnen, denn dadurch wird die Übersicht gewahrt.

    Ein eigener Thread nutzt der Kommunikation, verhindert Spannungen und Streit und trägt der Übersichtlichkeit in einem Forum bei.

    Grüße,

    Robert


    Freitag, 4. November 2011 16:17
    Moderator