Gerätebeschriftung mit Nummer und Buchstabe hoch zählen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ichwars.

    Gerätebeschriftung mit Nummer und Buchstabe hoch zählen

    Hallo zusammen,

    kurze Beschreibung zu dem was ich vorhabe:

    Ich möchte eine Chassi Beschriftung erstellen, mit vorgegebenem Text, Nummer (über TextBox Eingabe) und einem Buchstaben (über TextBox Eingabe).


    Beides ist davon abhängig von der Auswahl der Anzahl und soll entsprechend hochgezählt werden.



    mein Code bisher:

    VB.NET-Quellcode

    1. Dim number As Integer = CInt(msSingleLinTxt70.Text)
    2. number += 1
    3. Dim asci As Char = CChar(msSingleLinTxt71.Text)
    4. For i = 1 To number
    5. ' '
    6. dt.Rows.Add("wdm" & msSingleLinTxt70.Text & asci & "." & msTxBox1.Text)
    7. '
    8. dt.Rows.Add("wdm" & msSingleLinTxt70.Text & asci & "." & msTxBox1.Text & "/" & mCbBox7.SelectedItem.ToString & "1")
    9. dt.Rows.Add("wdm" & msSingleLinTxt70.Text & asci & "." & msTxBox1.Text & "/" & mCbBox7.SelectedItem.ToString & "2")
    10. '
    11. Next


    Das hochzählen der Nummer klappt soweit, nur die Buchstaben wollen nicht funktionieren. Nehme ich statt

    VB.NET-Quellcode

    1. ​asci
    -->

    VB.NET-Quellcode

    1. ​Char(97 +1)
    klappt das zwar beginnend mit a. Nur brauche ich dort die Eingabe der TextBox.
    Ich komme leider nicht weiter. Vielleicht kann mir ja jemand einen Tipp geben oder zeigen wo mein Denkfehler liegt?

    VG und Danke im vorraus
    Bilder
    • Bild_2023-04-30_162248243.png

      1,87 kB, 584×41, 196 mal angesehen
    • Bild_2023-04-30_162358819.png

      1,84 kB, 163×66, 198 mal angesehen
    Du kannst mit Convert.ToChar(HierEineZahlEinsetzen) ein Zeichen erhalten. Mit 97 erhältst Du a, mit 98 b usw.
    Vorher kannst Du auch ein (eingegebenes) Zeichen in eine Zahl umwandeln: Convert.ToInt32("a"c) ergibt 97
    Alternativ kannst Du natürlich auch für die Nummber ein NumericUpDown und für die Buchstaben ne ComboBox verwenden.

    btw: Heißt das Ding bei Euch wirklich Chassi? Ich kenn nur Chassis.
    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.
    @ichwars Wenn nur Ziffern und Chars vorkommen, kannst Du alle erlaubten Zeichen in je eine Liste packen und dann per Index das nächste Zeichen rausholen.
    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!
    Vollzitat eines Vorposts an dieser Stelle entfernt ~VaporiZed

    *Rechtschreibfehler sind gewollt :D Nein im ernst, Du hast natürlich Recht, ich meinte Chassis.

    Weitere ComboBoxen wollte ich eigentlich nicht einfügen.

    VB.NET-Quellcode

    1. Convert.ToChar(HierEineZahlEinsetzen)
    schau ich mir mal an. Danke

    RodFromGermany schrieb:

    @ichwars Wenn nur Ziffern und Chars vorkommen, kannst Du alle erlaubten Zeichen in je eine Liste packen und dann per Index das nächste Zeichen rausholen.


    Danke, schaue ich mir ebenfalls mal an.

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

    Hier noch einige Fragen für potentielle Fehlerfälle:
    Was soll denn passieren, wenn der Anwender ein großes "A" eingibt?
    Was soll denn passieren, wenn der Anwender ein z eingibt?
    Was soll denn passieren, wenn der Anwender ein Sonderzeichen eingibt?
    Was passiert, wenn der Anwender eine Ziffer in das Buchstabenfeld einträgt?

    Man glaubt gar nicht auf was Anwender so alles kommen.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    mein Lösungsansatz:

    VB.NET-Quellcode

    1. ​Dim asci As Char = CType(TxtBox2.Text, Char)
    2. For i As Integer = Convert.ToInt16(asci) To Convert.ToInt16(asci) + 1
    3. dt.Rows.Add("wdm" & TxtBox1.Text & Convert.ToChar(i) & ".")
    4. '
    5. dt.Rows.Add("wdm" & TxtBox1.Text & Convert.ToChar(i) & "." & "/AC 1")
    6. dt.Rows.Add("wdm" & TxtBox1.Text & Convert.ToChar(i) & "." & "/AC 2")
    7. Next i


    Macht soweit was es soll. Kann man das so machen, oder ist das murks?
    Das ist schon etwas Murks.
    ASCII wird mit Doppel-I geschrieben.
    Was da alles für Umwandlungen dabei sind …
    Du wandelst einen TextBoxText in einen Char um. Das geht einfacher, nachdem Du geprüft hast, dass in der TextBox was drinsteckt: Dim Ascii = TxtBox2.Text(0)
    Deine Controlbenennung ist ausbaufähig: TxtBox1, TxtBox2 - da weiß niemand beim Codelesen, was inhaltlich Sinnvolles drinstecken könnte.

    VB.NET-Quellcode

    1. Dim Number = Convert.ToInt16(TxtBox2.Text(0))
    2. For i = Number To Number + 1
    3. Dim BaseText = $"wdm{TxtBox1.Text}{Convert.ToChar(i)}."
    4. dt.Rows.Add(BaseText)
    5. '
    6. dt.Rows.Add(BaseText & "/AC 1")
    7. dt.Rows.Add(BaseText & "/AC 2")
    8. Next

    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 das hatte ich mir schon fast gedacht, das mein Code Murks ist :(

    Die Control Benennung stammt aus einer einer TestApp um mir das eigentliche Programm nicht zu zerstören. Den Hinweis nehme ich aber gerne mit und überdenke die Benennung nochmal.
    Danke für die Unterstützung. :thumbup:
    VG