Listbox SelectedItem Length raus bekommen?

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

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    Listbox SelectedItem Length raus bekommen?

    Benutze eine Custom Listbox über ne DLL Datei.
    Bei der bekomme ich eine komische Length raus: 52 wenn der text aus nur 3 Buchstaben besteht :/
    Code: ListBox1.Selecteditem.Tostring.Length oder ListBox1.Selecteditem.Tostring.Length.tostring oder ListBox1.items(ListBox1.Selectedindex).Tostring.Length oder ListBox1.items(ListBox1.Selectedindex).Tostring.Length.tostring

    Hab lange rum probiert aber die length bleibt immer bei 52. Meine Listbox hat insgesammt 40 Items.

    Naja, da die Length nicht wirklich funktioniert wollte ich die IF-Funktion so bauen dass es überprüfen soll ob es mit einer 2Stelligen Zahl anfängt + ein "." endet.
    Gibt es alternativ Wege das hinzukriegen ohne die Länge auf 3 zu prüfen?

    Info: Die Zahlen können nur von "01" - "40" sein. Dannach kommt immer ein "." .Und meine If Funktion soll auf sowas reagieren (Eine 2xStellige Zahl von 01-40 und ein Punkt ".").
    Kann man da noch was retten?

    Thx, mfg
    Da es eine Listbox "femder" Herkunft ist, musst du wohl mal in die Doku nachschauen.
    die Länge dort "52" riechen sehr nach der Länge in Pixeln.

    mache's dir einfacher und packe den selected item kurz in eine String-Variable...

    VB.NET-Quellcode

    1. Dim S As String
    2. S = listbox1.selecteditem
    3. MessageBox.Show(S.Length)

    Nun hast du die Zeichenanzahl.
    Ich denke mal, als "Denkanstoß", wie man die Sache umgehen kann reicht es.

    Und.. da es eine "externe" Listbox ist.
    Wer sagt dir, das item ein Objekt ist?
    Schließlich wird die Länge in Pixeln (anscheinend) ausgegeben. Also gut Möglich, das es sogar vom Typ String ist.

    Wer weiß... Wer weiß....

    RoulettePilot schrieb:

    Da es eine Listbox "femder" Herkunft ist, musst du wohl mal in die Doku nachschauen.
    die Länge dort "52" riechen sehr nach der Länge in Pixeln.

    mache's dir einfacher und packe den selected item kurz in eine String-Variable...

    VB.NET-Quellcode

    1. Dim S As String
    2. S = listbox1.selecteditem
    3. MessageBox.Show(S.Length)

    Nun hast du die Zeichenanzahl.

    Hatte ich schon davor versucht.
    Habs nochmal versucht aber bekomme immernoch 52 als länge obwohl der Text nur so ist: "01." :S

    Code:

    Visual Basic-Quellcode

    1. Dim S As String
    2. S = ListBoxControl1.SelectedItem.ToString
    3. MessageBox.Show(S.Length)

    Jedoch musste ich ListBox1.SelectedItem.Tostring machen, da es als Object dargestellt wird wie RushDen vorhersagen konnte.
    Die DLL hab ich decompiled aber Länge gibts nicht unter der Listbox.

    Gibt es andere Wege als meine Bedienung über die Länge zu prüfen?
    schau dir doch erstmal an, was Item überhaupt ist? Mach doch mal msgbox ( listbox1.selecteditem.tostring)

    Mittlerweile glaube ich nicht mehr an die Pixel, sondern das es eine Structur oder sonstwas ist, die einen hübschen langen Namen hat.

    ...und wenn du oben s = ListBoxControl1.SelectedItem.ToString machst, dann ist der Weg über die Variable unnütz.
    Es ging ja gerade darum die interne tostring der Box nicht zu benutzen.
    Also.. schau erstmal was es für ein Objekt ist.

    RoulettePilot schrieb:

    schau dir doch erstmal an, was Item überhaupt ist? Mach doch mal msgbox ( listbox1.selecteditem.tostring)

    Mittlerweile glaube ich nicht mehr an die Pixel, sondern das es eine Structur oder sonstwas ist, die einen hübschen langen Namen hat.

    ...und wenn du oben s = ListBoxControl1.SelectedItem.ToString machst, dann ist der Weg über die Variable unnütz.
    Es ging ja gerade darum die interne tostring der Box nicht zu benutzen.
    Also.. schau erstmal was es für ein Objekt ist.


    Ohje selecteditem ist doch nicht nur ein Object. Es zeigt mir nur den namen der selecteditem an.
    Habs dann so versucht aber immernoch 52 als Länge:

    Visual Basic-Quellcode

    1. Dim S As String
    2. S = ListBoxControl1.SelectedItem
    3. MessageBox.Show(S.Length)


    Auch so geht es nicht, immernoch mit 52:

    Visual Basic-Quellcode

    1. MessageBox.Show(ListBoxControl1.SelectedItem.Length)


    Wie gesagt, selecteditem ist nix anderes als der Text des selected items.
    Die Length sollte ich glaub ich vergraben, könnte man keine erweiterte Überprüfung machen wo es erstmal kuckt ob es mit einer
    2 Stelligen Zahl anfängt und mit einem . (Punkt) endet?
    Weiß nur nicht wie ich die 2 Stellige Zahl definieren soll, da es von 01-40 anders sein kann. :(

    UPDATE: Hab es mittlerweile so gelöst:

    Visual Basic-Quellcode

    1. Dim S As String
    2. S = ListBoxControl1.SelectedIndex + 1 '+1 weil der SelectedIndex mit 0 beginnt.
    3. If S.ToString.Length = 1 Then'Falls 1 Stellig dann eine 0 hinzufügen am Anfang
    4. S = 0 & S & "."
    5. End If
    6. MessageBox.Show(S)


    Danke an alle, fürs versuchen ;)

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „SEX“ ()

    RoulettePilot schrieb:

    also ich komme nun durcheinander..
    WAS genau willst du eigentlich herausbekommen?

    Ich(!) dachte die Länge der Zeichenkette, auf die SelectedIndex zeigt.
    Aber das scheint ja nicht der Fall zu sein.

    *grübel*


    Doch das wollte ich finden + eine . am ende sollte es beinhalten.
    Also insgesammt Length=3 -> 1xNummer, 1x Nummer, 1x Punkt (.) -> 2Stellige Zahl + 1x Punkt.
    Zuerst wollte ich einfach überprüfen ob die Länge = 3 ist, aber seitdem die Länge nicht richtig funktioniert hab ich es einfach so gelöst.
    Schalt bitte erstmal Option Strict auf On.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Dann code es um. Mit Strict Off wirst Du früher oder später gegen die Wand fahren.
    300.000 Zeilen mit Strict Off kann ich Dir gleich sagen, wenn es blöd kommt, dann schreibste alles nochmal, weil Du irgendwann den Fehler nicht mehr findest.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Na ja, Designehler nicht unbedingt, kommt halt drauf an, was das Teil macht. Was ich auf jeden Fall rate, sind Unittests!
    Bei so vielen Zeilen ein absoluter Muss, ansonsten wird es schwer, wenn Du mal was abänderst, denn das muss alles getestet werden.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    Na ja, Designehler nicht unbedingt, kommt halt drauf an, was das Teil macht. Was ich auf jeden Fall rate, sind Unittests!
    Bei so vielen Zeilen ein absoluter Muss, ansonsten wird es schwer, wenn Du mal was abänderst, denn das muss alles getestet werden.

    Ist ein sehr sehr großes Projekt, woran ich schon seid 1-2 Jahren dran arbeite.
    Was sind Unittests?
    Und wie meinst du das mit früher oder später?

    Auch wenn es schwer nach unnötig & umständlich gecodetes Zeug aussieht, es liegt daran dass mein Tool extrem sehr sehr sehr viele Features anbietet als ein
    komplexes DX game.
    Unittests sind Komponententests, die Du für das Projekt machen kannst. Dabei werden alle Sachen, die Du implementiert hast gezielt aufgerufen und getestet. Sinn dahinter ist, dass Du dein Zeugs genau testen musst/kannst, sodass Du weißt, was was macht, wie es es macht und ob da was nicht stimmt. Denn bei so vielen Sachen schleicht sich locker mal was ein.

    Das muss alles ausführlich gemacht werden. Denn stell' Dir vor, Du testest etwas nicht genau, das Teil wird released und es finden sich Fehler. Was dann? Eventuell findest Du die Ursache schwer bis gar nicht im vielen Code. Wenn es dann böse ausgeht, schreibste das nochmal.

    Wenn Du vorher alles genau testest, dann sollte nichts schiefgehen. Und bei Änderungen wird alles automatisch übernommen, wenn Du eine Referenz auf dein Projekt erstellst.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: