Vb6 - Resultaat van listbox items in twee textboxen weergeven

Status
Niet open voor verdere reacties.
Probeer dit eens:
Code:
Private Sub Form_Load()
    ipos = -1
    On Error Resume Next

    Dim Bestand As Long
    Dim lijn As String
    Dim textAndValue() As String
    List1.Clear
    Bestand = FreeFile
    
    Open App.Path & "\BLOPaper.txt" For Input As #Bestand
    Do While Not EOF(Bestand)
        Line Input #Bestand, lijn
        If Len(lijn) Then
            List1.AddItem Split(lijn, "*")(0)
            teksten(aantalteksten) = lijn & "*"
            aantalteksten = aantalteksten + 1
        End If
    Loop
    Close #Bestand
End Sub

Private Sub List1_Click()
    If List1.ListIndex >= 0 Then
        Text1.Text = Split(teksten(List1.ListIndex), "*")(1)
        If UBound(teksten) > 1 Then
            Text2.Text = Split(teksten(List1.ListIndex), "*")(2)
        End If
    End If
End Sub
 
Error Subscript out of range
hier
Code:
Text1.Text = Split(teksten(List1.ListIndex), "*")(1)
 
Werkt hier prima met het tekstbestand dat in je zip zat.
 
Code:
Zoals nu is*werkt

Test*Huis*1
Test2*kat*1
 
Zoals je ziet is nog niet juist
Ik heb een regel toegevoegd om duidelijker te maken
een*twee*drie
Een moet in de list box staan als titel

Twee in text1

drie in text2
 

Bijlagen

  • test3.jpg
    test3.jpg
    31,9 KB · Weergaven: 48
Laatst bewerkt:
Ik had voor een test een array aangepast en niet terug gezet. Bij deze gecorrigeerd:
Code:
Dim ipos As Integer
'Dim Toeslag As Integer
Dim aantalteksten As Integer
Dim teksten() As String

Private Sub Form_Load()
    ipos = -1
    On Error Resume Next

    Dim Bestand As Long
    Dim lijn As String
    Dim textAndValue() As String
    List1.Clear
    Bestand = FreeFile
    
    Open App.Path & "\BLOPaper.txt" For Input As #Bestand
    Do While Not EOF(Bestand)
        Line Input #Bestand, lijn
        If Len(lijn) > 0 Then
            List1.AddItem Split(lijn, "*")(0)
            ReDim Preserve teksten(aantalteksten)
            teksten(aantalteksten) = lijn & "*"
            aantalteksten = aantalteksten + 1
        End If
    Loop
    Close #Bestand
End Sub

Private Sub List1_Click()
    If List1.ListIndex >= 0 Then
        Text1.Text = Split(teksten(List1.ListIndex), "*")(1)
        If UBound(teksten) > 1 Then
            Text2.Text = Split(teksten(List1.ListIndex), "*")(2)
        End If
    End If
End Sub
 
Laatst bewerkt:
Uff. Prachtig. Het werkt !!!

Zeer bedankt, Edmoor. En sorry voor de last.
De oplossing was (zeker voor mij) niet gemakkelijk.

Hartelijk Bedankt
satriano:thumb:
 
Laatst bewerkt:
Graag gedaan.
Als ik het een last vond zou ik niet op Helpmij zitten ;)
 
...en nu is ook gemakkelijk te uitbreiden bv. met 4 textboxen (of meer)

Code:
Private Sub List1_Click()
    If List1.ListIndex >= 0 Then
        Text1.Text = Split(teksten(List1.ListIndex), "*")(1)
        If UBound(teksten) > 1 Then
            Text2.Text = Split(teksten(List1.ListIndex), "*")(2)
            Text3.Text = Split(teksten(List1.ListIndex), "*")(3)
            Text4.Text = Split(teksten(List1.ListIndex), "*")(4)
        End If
    End If
End Sub

Nogmaals Bedankt.
 
Je zou er ook voor kunnen kiezen de data in een eigen klasse onder te brengen. Bijvoorbeeld iets als:

[cpp]
public class CustomDataItem // (naamgeving kan wel beter :p)
{
public string Subject { get; set; }
public string Part1 { get; set; }
public string Part2 { get; set; }

public override string ToString()
{
return Subject; // De tekst die in de listbox komt te staan
}
}
[/cpp]

Hierdoor worden een aantal dingen een stuk makkelijker:

Voor het inlezen en wegschrijven van de data kun je nu gebruik maken van serialization/deserialization. Bijvoorbeeld door een klasse CustomDataItemList toe te voegen welke een lijst van CustomDataItem's heeft en verantwoordelijk is voor het inlezen en wegschrijven van de data:

[cpp]
public class CustomDataItemList
{
public List<CustomDataItem> CustomDataItems { get; set; }

public static void WriteToXmlFile(string path, CustomDataItemList customDataItemList, bool append = false)
{
TextWriter writer = null;
try
{
var serializer = new XmlSerializer(typeof(CustomDataItemList));
writer = new StreamWriter(path, append);
serializer.Serialize(writer, customDataItemList);
}
finally
{
writer?.Close();
}
}

public static CustomDataItemList ReadFromXmlFile(string path)
{
TextReader reader = null;
try
{
var serializer = new XmlSerializer(typeof(CustomDataItemList));
reader = new StreamReader(path);
return (CustomDataItemList)serializer.Deserialize(reader);
}
finally
{
reader?.Close();
}
}
}
[/cpp]

Voor het vullen van de listbox kan de opgehaalde lijst met CustomDataItem's als data source gebruikt worden:

[cpp]
public Form1()
{
InitializeComponent();

var items = CustomDataItemList.ReadFromXmlFile(DefaultInputFile);

listBox1.DataSource = items.CustomDataItems;
listBox1.SelectedValueChanged += ListBox1_SelectedValueChanged;
listBox1.ClearSelected();
}
[/cpp]

En voor het updaten van je GUI wanneer er een ander item uit de listbox wordt geselecteerd kan je iets als het onderstaande doen:

[cpp]
private void ListBox1_SelectedValueChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex != -1)
{
var item = (CustomDataItem)listBox1.SelectedItem;
textBox1.Text = item.Part1;
textBox2.Text = item.Part2;
}
}
[/cpp]

Alleen moet je het bovenstaande dan nog even vertalen naar VB.NET.

(heb met een vriend wat gedronken, dus het kan zijn dat de zinnen niet helemaal kloppen. Maar de code werkt wel :p)
 
In ieder geval is dat in C geschreven en TS heeft al moeite met Visual Basic.
Daarnaast is VB6 geen VB.Net.
Fijne avond nog samen ;)
 
In ieder geval is dat in C geschreven en TS heeft al moeite met Visual Basic.

Heb al zo lang geen VB meer aangeraakt dat het me teveel tijd kost om daar een voorbeeld mee te maken. Het ging om meer om het idee.

Daarnaast is VB6 geen VB.Net.

Ja, daar had ik dus helemaal overheen gekeken. Daarvoor mijn excuses. Al vraag ik me af waarom iemand die nu begint met leren programmeren nog met VB6 aan de slag gaat.

Fijne avond nog samen ;)

Bedankt. Jij ook :)
 
Al vraag ik me af waarom iemand die nu begint met leren programmeren nog met VB6 aan de slag gaat.

Mee eens.
Dan kan je beter met Visual Basic in Visual Studio (VB.Net) aan de gang gaan.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan