Typ des Inhalts einer Textbox abfragen/ ändern

  • VB.NET
  • .NET 5–6

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von JanRambo.

    Typ des Inhalts einer Textbox abfragen/ ändern

    Hallo zusammen,

    ich versuche aktuell für ein Projekt (REST API Abfrage, bei der der Nutzer durch das eingeben einer Zahl oder eines Namens ein Datenbankergebnis zurückbekommt) festzustellen, ob etwas, was ich in ein Eingabefeld eingebe, eine Zahl oder ein Wort ist.
    Den eigentlichen Vergleich habe ich bereits mithilfe von "TypeOf" gemacht, jedoch ist der .Text einer Textbox immer ein String.

    Der "sonstige" Code:

    VB.NET-Quellcode

    1. Dim i = TextBox1.Text

    Mein Code dazu im Button:

    VB.NET-Quellcode

    1. If TypeOf i Is Integer Then
    2. MsgBox("Es ist eine Zahl!")
    3. ElseIf TypeOf i Is String Then
    4. MsgBox("Es ist ein Wort!")
    5. End If


    Darum habe ich nun folgende Frage: Gibt es eine Möglichkeit den Inhalt der Textbox so abzufragen, dass Zahlen direkt den Typ Integer und Text den Typ String hat? Oder schaffe ich es irgendwie das ganze im Nachhinein zu ändern?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JanRambo“ ()

    Willkommen im Forum.

    Nuja, in String kann wohl so ziemlich alles konvertiert werden.
    Integer und andere Datentypen: Dafür gibt es (meist): Dim UmwandlungIstMöglich = Wunschtyp.TryParse(Text, ZielvariableVomWunschtypDieDenWertAufnehmenSoll)

    btw: Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Stichwort MsgBox; ist VB6
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @JanRambo Ebenfalls Wilkommen im Forum. :thumbup:
    Was kann denn in der TextBox stehen?
    Welche numerischen Datentypen schweben Dir denn vor - Ganzzahl, Gleitkommazahl, Dezimalseparator?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Was kann denn in der TextBox stehen?Welche numerischen Datentypen schweben Dir denn vor - Ganzzahl, Gleitkommazahl, Dezimalseparator?

    In der Textbox sollen nur Ganzzahlen stehen, also 1, 2, 3 usw. oder Wörter.


    @VaporiZed
    Nuja, in String kann wohl so ziemlich alles konvertiert werden.​

    Ich glaube wir haben ein bisschen an einander vorbeigeredet. Mein Plan war es nicht, zumindest nicht direkt, etwas zu konvertieren. Ich hätte es gerne so, dass automatisch erkannt wird, ob in der Textbox Text oder eine Zahl steht und daraufhin unterschiedlichen Code auszuführen (Beispiel s. If Bedingung oben).
    Und zum Thema
    empfohlene VS-Einstellungen/ MsgBox; ist VB6
    : Da es hier nicht Primär um die MsgBox ging, sondern sie nur Platzhalter war, um die Funktion zu überprüfen dachte ich, dass .NET 6 reichen würde. Ich kann es aber gerne auch nochmal ändern.
    Ich sehe, dass Du noch nicht nachgeschaut hast, was mein Code macht. Mit TryParse kann man rausfinden, ob ein String, in einen anderen Typ konvertiert werden kann, also genau das, was Du willst. Du kannst also rausfinden, ob ein Text, eine Ganzzahl, eine Kommazahl oder wasauchimmer in der TextBox steht.
    Und zu den empfohlenen Einstellungen: Ich weise immer darauf hin, wenn jemand mit MsgBox und Co kommt. Denn wenn solch ein Code zu sehen ist, sind oft noch ganz andere Dinge aktiv, die nicht aktiv sein sollten. Manchmal z.B. Option Strict Off.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    JanRambo schrieb:

    Ich glaube wir haben ein bisschen an einander vorbeigeredet.... Ich hätte es gerne so, dass automatisch erkannt wird...
    na, an Vaporized lags jdfs. nicht.
    Der hat dir mit TryParse() das mittel an die Hand gegeben, wie man - salopp gesprochen - "automatisch erkennt, ob eine Zahl drin steht".

    Und zusätzlich noch den wichtigen Hinweis, wie du von vb6-Gekröse wegkommst.

    Edit: zu spät ;)
    @VaporiZed @JanRambo Wenn Du Ganzzahlen suchst und da steht 3,14 drinne, würde das mit Integer.TryParse()-Logik nicht als Ganzzahl und somit als Text erkannt werden.
    Du musst Deine Spezifikation deutlich präzisieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @VaporiZed Stimmt, mein Fehler! Die empfohlenen Einstellungen habe ich mir aber wenigstens richtig angeschaut und Option Strict Off direkt geändert. Danke!
    Vielen Dank! mein Code funktioniert jetzt endlich.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​If Integer.TryParse(i, a) = True Then
    2. MsgBox("Es ist eine Zahl!")
    3. ElseIf Integer.TryParse(i, a) = False Then
    4. MsgBox("Es ist ein Wort!")
    5. End If


    @RodFromGermany Auch hier Danke für den Hinweis! Bei weiteren Fragen werde ich auf jeden Fall versuchen mich besser und präziser auszudrücken.

    Ich entschuldige mich bei euch nochmal. Ich bin, wie ihr euch vielleicht denken könnt, noch ziemlich unerfahren was VB angeht. Und dementsprechend war wohl auch meine Frage formuliert :D
    Wie gesagt: Nächstes Mal werde ich versuchen sie zu präziser zu formulieren und mir mehr Zeit nehmen um mich genauer mit den Antworten auseinander zu setzen. ;)
    noch stilistische Verbesserung

    VB.NET-Quellcode

    1. If Integer.TryParse(i, a) Then
    2. Messagebox.Show("Es ist eine Zahl!")
    3. Else
    4. Messagebox.Show("Es ist ein Wort!")
    5. End If

    Im Einzelnen:
    1. Es ist unnötig, einen Wahrheitswert mit True zu vergleichen - davon wird er nicht wahrer.
    2. Wenn es nur zwei Möglichkeiten gibt, dann reicht Else - eine nochmalige Überprüfung mit ElseIf ist unnötig.
    3. Ohne Vb6-Gekröse formuliert


    Zum entschuldigen: Naja, wir klingen oft zickiger als wir sind.
    Grad Einsteiger können die Gepflogenheiten ja nicht kennen, und die "best Practices", nach denen ein Coder-Forum gut funktioniert.
    Also auf jeden Fall eine gute Idee, sich immer sorgfältig mit den Antworten auseinanderzusetzen, und besser nix erwidern, ehe man nicht wirklich inhaltlich geprüft hat, und zwar jeden Punkt.
    Dassis garnet so einfach, weil ein Profi kann in drei Zeilen Anfänger-Code zehn Fehler entdecken, und ausserdem noch Ideen anbringen, wie man das eigentliche Problem noch viel eleganter lösen könnte.

    Und wie gesagt als Profi entwickelt man leicht eine Tendenz zur Zickigkeit.
    Weil es gibt auch Kandidaten, die auch nach 1000 Posts nichts gelernt haben, immer noch denselben Grusel-Code verzapfen, und gefühlt immer noch dieselben Fragen stellen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    JanRambo schrieb:

    Ich entschuldige mich bei euch nochmal.
    Du musst Dich nicht entschuldigen, wir schrfeiben überall, wenn uns stilistisch etwas nicht gefällt ;) , auch wenn es nicht unmittelbar etwas mit dem Thema zu tun hat.
    Es ist noch kein Meister vom Himmel gefallen (es sei denn der Weltmeister im Fallschirmsprung).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn es nur um das Testen des Inhalts geht, geht es auch ohne Zielvariable. EdRs Code angepasst:

    VB.NET-Quellcode

    1. If Integer.TryParse(DerZuPrüfendeText, Nothing) Then
    2. Messagebox.Show("Es ist eine Ganzzahl!")
    3. ElseIf Double.TryParse(DerZuPrüfendeText, Nothing) Then
    4. Messagebox.Show("Es ist eine Kommazahl!")
    5. Else
    6. Messagebox.Show("Es ist keine Ganzzahl und keine Kommazahl! Vielleicht doch nur ein Text?")
    7. End If

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke erst mal für die stilistischen Verbesserungen. Klingt alles ganz logisch und grundsätzlich weiß ich das auch. Denke nur irgendwie nie daran das auch anzuwenden. :D

    Ich finds auch grundsätzlich nicht schlecht, wenn man mal "zickiger" ist. Sonst verstehen es viele einfach nicht und im Endeffekt hat keiner von euch Profis Lust mit einem Anfänger lange rum zu diskutieren.
    Und es ist auch gut, dass ihr einfach schreibt, wenn was stilistisches nicht passt! Bringt ja nix jemanden zu verschonen, vor allem, wenn er sonst Zeit und Arbeit sparen würde. ;)

    Und @VaporiZed das ist gut zu wissen. Ich hätte sonst immer eine extra Variable gemacht.

    Dann nochmal Danke an euch und einen schönen Abend!