Vraag over listbox

Status
Niet open voor verdere reacties.

martijn098

Gebruiker
Lid geworden
18 feb 2012
Berichten
341
Hallo

in mijn programma heb ik een listbox gebouwd Radio.png nu is het probleem als hij het opslaat en ik het programma opnieuw open krijg ik dit : Radio opgeslagen.png hoe kan ik het instellen dat hij netjes achter elkaar blijft staan ?
 
Ligt eraan hoe je het opslaan en oproept :P

Zo te zien gebeurt er iets bij het '-' teken
 
uuu bedoel je dit ?

laden :
Code:
 Try
            If File.Exists(Application.StartupPath & "\save.txt") Then

                Dim SR As StreamReader, Temp, Item As String, i As Integer
                If (File.Exists(Application.StartupPath + "\save.txt")) Then
                    SR = File.OpenText(Application.StartupPath & "\save.txt")
                    Temp = SR.ReadToEnd()
                    SR.Close()
                    For i = 0 To Temp.Length - 1
                        If (Temp.Substring(i, 1) <> "-") Then
                            Item += Temp.Substring(i, 1)
                        Else
                            ListBox1.Items.Add(Item)
                            Item = String.Empty
                        End If
                    Next
                    ListBox1.Items.Add(Item)
                End If
            End If

openen
Code:
        If File.Exists(Application.StartupPath + "\save.txt") Then
            My.Computer.FileSystem.DeleteFile(Application.StartupPath + "\save.txt")
        End If
        If ListBox1.Items.Count > 0 Then
            Dim SW As StreamWriter, i As Integer, Temp As String
            SW = IO.File.CreateText(Application.StartupPath + "\save.txt")
            For i = 0 To ListBox1.Items.Count - 1
                If (i <> 0) Then
                    Temp = Temp + "-" + ListBox1.Items.Item(i)
                Else
                    Temp = ListBox1.Items.Item(0)
                End If
            Next
            SW.Write(Temp)
            SW.Flush()
            SW.Close()
        End If
 
Laatst bewerkt:
In plaats van met een streamreader te werken kun je ook gewoon de 'File.ReadAllLines' method gebruiken. Dan krijg je all fijn een string array terug met elke regel.

Van de listbox items naar een string array is ook eenvoudig te doen met een foreach loop en dan kun je de 'File.WriteAllLines' gebruiken op het allemaal weer op te slaan.



p.s.

In plaats van
Code:
Application.StartupPath & "\save.txt"
zou ik kiezen voor de 'Path.Combine' method dan hoef je niet met de backslash te werken.
Code:
Path.Combine(Application.StartupPath, "file.txt")
 
Ik snap er helemaal niks van :D zal je een beetje kunnen helpen met de volledige code ?
 
Laatst bewerkt:
in C# wel, vrij basic dus zal wel niet lastig zijn om om te zetten naar VB
(geen exception handling)

Code:
public partial class MainView : Form
{
	private readonly string _root = Application.StartupPath;
	private string _file = "data.txt";

	public MainView()
	{
		InitializeComponent();
		Load();
	}

	private void Load()
	{
		string path = Path.Combine(_root, _file);

		lstItems.Items.Clear();

		if (File.Exists(path))
		{
			string[] lines = File.ReadAllLines(path);

			foreach (var line in lines)
			{
				lstItems.Items.Add(line);
			}
		}
	}
	private void Save()
	{
		string path = Path.Combine(_root, _file);

		var items = new List<string>();
		foreach (var item in lstItems.Items)
		{
			items.Add(item.ToString());
		}

		File.WriteAllLines(path, items.ToArray());
	}

	//events
	private void MainView_FormClosing(object sender, FormClosingEventArgs e)
	{
		Save();
	}
	private void btnAdd_Click(object sender, EventArgs e)
	{
		lstItems.Items.Add(txtItem.Text);
		txtItem.Clear();
		txtItem.Focus();
	}
}

Zo hoef je niets te 'parsen' of een reader/writer te gebruiken.


oh, link naar converter als je er niet uit komt -> http://converter.telerik.com/
 
Laatst bewerkt:
Bloodshed's code in vb.net:
[CPP]Public Class Form1

Private ReadOnly Root As String = Application.StartupPath
Private _file As String = "data.txt"

Private Sub LoadListbox()
Dim path As String = IO.Path.Combine(Root, _file)
ListBox1.Items.Clear()

If IO.File.Exists(path) Then
Dim Lines() As String = IO.File.ReadAllLines(path)

For Each Line As String In Lines
ListBox1.Items.Add(Line)
Next
Else
MsgBox("Bestand bestaat niet.")
End If
End Sub

Private Sub SaveListbox()
Dim path As String = IO.Path.Combine(Root, _file)
Dim Items As New List(Of String)

For Each Item In ListBox1.Items
Items.Add(Item)
Next

IO.File.WriteAllLines(path, Items.ToArray)
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
LoadListbox()
End Sub

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
SaveListbox()
End Sub
End Class
[/CPP]

Zou volgens mij idd moeten werken... (kan zijn dat ik anders een foutje heb gemaakt bij het 'vertalen', ik heb het maar 1x getest)

MartinJM
 
Hij slaat hem op een een of andere manier niet op ik zal is kijken als ik ergens de fout kan vinden
 
Laatst bewerkt:
Als je eens een breakpoint zet op deze lijn
Code:
IO.File.WriteAllLines(path, Items.ToArray)
(regel 29 in het voorbeeld)

En dan eens kijkt of de variable Items wel (goed) gevuld is... Dan weet je daarna iets beter waar de fout zit.


Bedenk je ook dat windows niet op alle plaatsen zomaar toestaat dat er iets opgeslagen wordt..

MartinJM


[edit]
Ik heb het nog eens iets uitvoeriger getest, maar bij mij werkt het gewoon....
[/edit]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan