Listbox Mehrfach Splitten

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy16823.

    Listbox Mehrfach Splitten

    Hallo, ich möchte gerne eine Listbox merhfach splitten.

    Das hier möchte ich splitten als Beispiel:

    VB.NET-Quellcode

    1. peter:auto:sport:farbe


    ich möchte nur den Namen und Fahrzeug also Auto (1 und 2)

    Das hier habe ich versucht:

    VB.NET-Quellcode

    1. For Each line In Listbox1.Items
    2. Listbox1.Items.Add(line.Split(":")(0) & ":" & line.Split(":")(1))
    3. Listbox1.Items.Clear()
    4. Listbox1.Items.AddRange(Listbox1.Items)
    5. Next


    laut code sollte er alles vor den ersten ":" und deb zweiten ":" nehmen.
    warum funktioniert dieser code nicht bei mir wenn ich die textdatei in eine listbox öffne und sie dann splitten will?
    Zum 100. Male: Schalte endlich Option Strict auf ON.

    Dann:
    1. String.Format nutzen!
    2. Was funktioniert nicht? X(
    3. Du addest das Item, clearst alles und dann fügst Du die Items neu hinzu. -> Wenn Du alles clearst, dann sind keine Items drinne und Du kannst auch keine hinzufügen.
    #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 :!:
    Hallo Trade, auch ohne clear passiert bei mir nichts:

    VB.NET-Quellcode

    1. For Each line In Listbox1.Items
    2. Listbox1.Items.Add(line.Split(":")(0) & ":" & line.Split(":")(1))
    3. Next


    in der Listbox sind in jeder Zeile solche einträge:

    VB.NET-Quellcode

    1. peter:auto:tennis:rot
    2. jutta:fahrad:schwimmen:blau


    Hallo purpur,

    ich bin gerne bereit Dir weiterzuhelfen, wenn Du die Punkte 1 und 3 erfüllst und Option Strict On schaltest. Dann können wir weiterschauen, aber das ist sonst gar kein guter Anfang.
    #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 An dieser Stelle möchte ich mal etwas zu diesem Ganze "Option Strict On"-Müll sagen. Es mag villeicht sein, dass man ranzigen Schrott schreibt, wenn Option Strict = Off ist, aber genau dafür wurde Visual Basic gemacht. Es ist eine Programmiersprache für Einsteiger und Faule. Die Einsteiger wissen es nicht besser und die Faulen haben keine Lust. Und wenn das dir nicht passt, dann wechsle die Programmiersprache und geh in ein anderes Forum.

    ichduersie schrieb:

    Es ist eine Programmiersprache für Einsteiger und Faule.

    Falsch. Wäre es eine Sprache für Einsteiger, dann ginge das gar nicht. Was macht es für nen Sinn einem Neuling Bullshit beizubringen? Richtig, gar keinen.

    ichduersie schrieb:

    aber genau dafür wurde Visual Basic gemacht

    Leider.

    ichduersie schrieb:

    Die Einsteiger wissen es nicht besser und die Faulen haben keine Lust.

    Deshalb muss man das den Einsteigern sagen und die, die zu faul sind ne Konvertierung zu machen, die sollen es mit dem Programmieren gleich sein lassen.

    ichduersie schrieb:

    Und wenn das dir nicht passt, dann wechsle die Programmiersprache und geh in ein anderes Forum.

    Keine Sorge, ich programmiere nur noch C# und nicht mehr mit VB.NET. Und warum sollte ich in ein anderes Forum gehen? Was ist denn das für eine Logik?
    Option Strict ON ist Grundvorraussetzung für gutes Programmieren und diese Meinung vertrete nicht nur ich hier, sondern eigentlich alle, die Ahnung vom Programmieren haben.

    ichduersie schrieb:

    "Option Strict On"-Müll

    ... zeigt mir, dass Du nicht grade weißt, wovon Du redest.
    #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 :!:
    Glaube auch nicht das option strict on hier sofort hilft.

    Ich habe eine Textdatei in einer Listbox geöffnet .
    Dort stehen die Einträge und ich will "bei jeden Eintrag" in der Listbox beim dritten ":" alles dahinter löschen.
    Dieser Code ging eigentlich und habe den selber hier von einen netten Forum Benutzer.

    Die Sache ist die, das es ich glaube "Runtime" geht, also wenn etwas in die "Listbox" generiert wird, aber wenn ich eine Textdatei die Einträge in die Listbox lade via "OpenFileDialog", dann funktioniert das nicht mehr.
    ps: ich könnte jeden Eintrag einzeln über eine TExtbox laufen lassen und sie dort z.B. einzeln splitten wenne es nicht anders geht.
    @ Option Stict ON = Fehler 102 Die maximale Fehleranzahl wurde überschritten. (ist mir grad zuviel arbeit wegen nur so einer kleinen listbox split funktion den code umzuschreiben)
    Fehler 74 "Option Strict On" lässt keine impliziten Konvertierungen von System.Net.WebRequest in System.Net.HttpWebRequest zu. (Ich lasse Option Strict mal auf OFF das umkenvertieren habe ich noch nicht drauf)




    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „purpur“ ()

    purpur schrieb:

    Glaube auch nicht das option strict on hier sofort hilft.

    Das hat auch niemand gesagt. Es geht nur darum, dass man dann, wenn es ordentlich ist, über weitere Schritte nachdenken kann.

    Edit:// @purpur

    purpur schrieb:

    ist mir grad zuviel arbeit wegen nur so einer kleinen listbox split funktion den code umzuschreiben

    Ach ja? Heilige Scheiße. Wenn das so klein ist, wie kann man da überhaupt so viele Fehler machen. Was müsste ich bei 15k Zeilen Code sagen, wenn ich mal was umändern müsste. tss... Also Faulheit ist nen großes Manko beim Programmieren, das macht auch keinen guten Anschein.
    Schreibe es einfach um, geht i. d. R. schnell und macht es besser. Oben muss sogar nur ein "c" hinter den String zum Splitten.
    Also nicht viel Arbeit.
    #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 :!:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ ()

    Ich habe auch kein Option Strict On aber nur weil ich das ganze Caste etc von alleine mache. Früher habe ich auch immer Form1.Show() gemacht und das ende was war, ich habe in C# doof geschaut als dies dort so nicht Funktionierte. Deswegen bin ich wie @Trade auch der Meinung das gerade Option Strict On für Anfänger sehr geeignet ist. Denn eventuell kommt der Tag das du C# etc. nutzt und da kannst du nicht einfach

    C#-Quellcode

    1. String zahl = "1";
    2. int zahl2 = zahl;


    machen sondern musst es Casten bzw. parsen

    C#-Quellcode

    1. String zahl = "1";
    2. int zahl2 = int.parse(zahl);


    und genau bei fall 1 würde in VB.Net Option Strict On einen Fehler melden.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    @Andy16823 Da gebe ich Dir recht, nur dass das Form1.Show() nix mit Option Strict zu tun hat, wenn Du das darauf beziehen wolltest. Oder war das generell bzgl. C# <=> VB.NET gemeint? ;)

    Außerdem noch: Lieber TryParse nehmen.
    #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 :!:
    zum Topic:

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9. namespace WindowsFormsApplication1
    10. {
    11. public partial class Form1 : Form
    12. {
    13. public Form1()
    14. {
    15. InitializeComponent();
    16. _listData = System.IO.File.ReadAllLines("Pfad", Encoding.Default).Select(item => Person.Parse(item.Split(':'))).ToList();
    17. SetSource();
    18. }
    19. private void SetSource()
    20. {
    21. listBox1.DataSource = null;
    22. listBox1.DataSource = _listData;
    23. }
    24. private List<Person> _listData;
    25. private void button1_Click(object sender, EventArgs e)
    26. {
    27. _listData.ForEach(item => item.StringValue = string.Format("{0}:{1}", item.Name, item.Car));
    28. SetSource();
    29. }
    30. }
    31. public class Person
    32. {
    33. public string Name { get; set; }
    34. public string Car { get; set; }
    35. public string Sport { get; set; }
    36. public string Color { get; set; }
    37. public string StringValue { get; set; }
    38. public static Person Parse(string[] pInfo)
    39. {
    40. if (pInfo.Length != 4)
    41. throw new ArgumentException("Ungültige Daten!");
    42. var newPerson = new Person();
    43. newPerson.Name = pInfo[0];
    44. newPerson.Car = pInfo[1];
    45. newPerson.Sport = pInfo[2];
    46. newPerson.Color = pInfo[3];
    47. newPerson.StringValue = string.Format("{0}:{1}:{2}:{3}", newPerson.Name, newPerson.Car, newPerson.Sport, newPerson.Color);
    48. return newPerson;
    49. }
    50. public override string ToString()
    51. {
    52. return StringValue;
    53. }
    54. }
    55. }

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

    das war generell für C# gemeint. Ja mit TryParse wäre es besser, wobei hier ja ersichtlich ist, das die variable zahl in einen int wert geparst wird. Sollte nur ein Beispiel sein.

    zu dem Problemm

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    5. Dim line As String = Me.ListBox1.Items(i).ToString()
    6. Dim values As String() = line.Split(CChar(":"))
    7. Me.ListBox1.Items.Add(values(0) & "->" & values(2))
    8. Next
    9. End Sub
    10. End Class



    --------

    Das sollte dein Fehler sein, oder ?

    Zusätzliche Informationen: Die Liste, an die der Enumerator gebunden ist, wurde geändert. Ein Enumerator kann nur verwendet werden, wenn die Liste nicht geändert wird.


    Der Fehler ist, das du keine Collection in der For Each Schleife verändern kannst. Das heißt du musst es mit einer normalen For Schleife machen
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Andy16823“ ()

    @Andy16823 Grade haben wir noch geredet. Das ist Strict Off und eigentlich der selbe Code wie oben, nur, dass Du ne Variable 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 :!:
    Ich habe es eben ausgebessert. Hatte das nur aus dem Kopf geschrieben. Man muss mit Option Stric On mit CChar(":") den Split Char setzen.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    5. Dim line As String = Me.ListBox1.Items(i).ToString()
    6. Dim values As String() = line.Split(CChar(":"))
    7. Me.ListBox1.Items.Add(values(0) & "->" & values(2))
    8. Next
    9. End Sub
    10. End Class
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Jo, man kann auch btw einfach ein ​c hinter den String schreiben. Reicht völlig aus.
    #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 :!:
    Danke @Andy16823 dieser code scheint perfekt zu funktionieren.
    Danke auch an @Trade und alle andere, ich werde mir auch Option Strict ON im Kopf behalten und wenn ich soweit bin auch direkt umsetzen.
    ps: man kann auch die Einträge testweise einfach in die Listbox kopieren (Also ohne openfiledialog) und sie dann mit den code von Andy16823 direkt splitten, thx.

    Trade schrieb:

    Jo, man kann auch btw einfach ein ​c hinter den String schreiben. Reicht völlig aus.


    das ist das schöne an C# einfach .Split(':') und der Compiler weiß das es ein Char und kein String ist.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    RushDen schrieb:

    Du solltest Daten und GUI trennen und nicht an der Listbox herumsplitten.
    In meinem Code sind die Daten einer Person in einer Klasse abgekapselt, die Daten welche angezeigt werden sollen in einer Eigenschaft (StringValue) und die Anzeige erfolgt dann in der Listbox.


    Ja Normal schon, bei mir ist es mehr ein Benutzerseitiges Programm, welches den benutzer ermöglicht selber zu splitten via "Checkbox", die können selber sagen was fehlen soll z.B. Split 0 oder 1, 2, 3, 4 etc, ich habe auch kombinationen hergestellt die auf der Checkbox aufgelistet sind, also wie sie gesplittet werden wenn man die checkbox einen hacken sätzt.
    Die benutzer können auch ihre eigenen Listen in das Tool laden und sie nach belieben splitten.

    Evt. werde ich auch ein Tool für mich bauen das ich so via RegEx durch listboxen (muss nicht unbedingt eine Listbox sein, Textbox geht auch oder RT) splitten kann, aber step by step, danke für die Information mit der Klasse und Eigenschaft (StringValue).