2007-10-19, 15:45
  #1
Medlem
Notera att jag är nybörjare i Visual Basic.

Jag håller på med ett program i Visual Basic. Det är en slags adressbok. Jag använder mig av textfiler för att lagra information. Jag har fått "sparfunktionen" (använt StreamWriter) att fungera. Det fungerar så att när man fyller i ett namn så skapas en ny mapp i programmets mapp; "C:\Programmet\Fornamn_Efternamn". I den mappen hamnar ett varsitt textdokument som endast består av en rad med olika information, exempelvis i stad.txt hamnar texten "Växjö" och i adress.txt hamnar texten "Björnvägen 12". För- och efternamnen finns även lagrade i en fil - C:\Programmet\namnen.txt - där varje rad består av ett namn. Allt detta fungerar utan problem.

Nu vill jag även kunna ladda in all denna information - som redan finns lagrade i textfilerna - i listboxen direkt programmet startar. Det som ska stå i listboxen ska vara "Förnamn Efternamn" och när man markerar namnet och klickar på knappen "Öppna" så ska det komma upp en messagebox med all information, till exempel:

----------------
Jonas Jonasson
0701234567
Växjö
mail@mail.se

|OK|
-----------------


Jag har googlat runt men inte kommit fram till hur jag ska göra detta. Är det någon som har någon kod eller något tips för att få detta att fungera? All hjälp uppskattas. Säg till om någon viktig information saknas så kommer jag med edit.

Tack på förhand.
Citera
2007-10-19, 16:04
  #2
Medlem
gadzooxs avatar
Vilket jobbigt sätt att lagra datat, ta en titt på databaser eller xml-serialisering istället.

Med tanke på att du har alla namn i namnen.txt, så är det väl bara att läsa den och trycka in raderna i listboxen? Nu kör jag visserligen C#, men du lär förstå nedan kod ändå:
Kod:
TextReader tr = new StreamReader("namnen.txt");
string namnen tr.ReadToEnd();
tr.Close();
foreach (
string namn in namnen.Split('\n'))
{
    
listBox1.Items.Add(namn);


Sedan lyssnar du bara på eventet listBox1.SelectedIndexChanged, läser vilket namn som valts, laddar datat för den personen med en TextReader (eller flera....) och kör genom string.Format() för att få en fin sträng som du sedan visar i MessageBox... Hur du hämtar datat orkar jag inte ens lägga mig i, med tanke på hur du valt att spara det...


Du har nog postat i fel forum btw. Du skrev att du använder StreamWriter vilket är ett .Net-objekt, du kör alltså VB.Net och bör således posta i .Net-forumet... Det här är gamla VB6 och VBA-forumet...
Citera
2007-10-19, 16:36
  #3
Medlem
gadzooxs avatar
Ett lite mer avancerat exempel på en objektorienterad approach med xml-serialisering. Återigen C#, men du förstår nog.. C# och VB.Net är ju syskon

Citera
2007-11-02, 08:19
  #4
Medlem
Exabytes avatar
Jag vet inte om det är exakt vad du är ute efter men jag snickrade ihop det här lite snabbt.

4 textboxar
txtNamn
txtTele
txtStad
txtMail

2 knappar
cmdLaggtill
cmdUppdatera

1 lista
List1

Module1

Kod:
Public Type person
namn 
As String
tele 
As String
stad 
As String
mail 
As String
End Type 

Form1

Kod:
Dim typPersoner(1 To 100) As person 'anpassa
Private Sub cmdlaggtill_Click()

Open App.Path & "\data.txt" For Append As #1
namn = txtNamn.Text
telefon = txtTele.Text
stad = txtStad.Text
mail = txtMail.Text
Write #1, namn, telefon, stad, mail
Close #1

List1.Clear
cmduppdatera_Click

End Sub

Private Sub cmduppdatera_Click()
If Dir(App.Path & "\data.txt") = "" Then
MsgBox "data.txt existerar inte.", vbCritical & vbOKOnly, "data.txt borta"
Exit Sub
End If
List1.Clear
x = 0
Open App.Path & "\data.txt" For Input As #1
Do While Not EOF(1)
Input #1, namn, tele, stad, mail
x = x + 1
typPersoner(x).namn = namn
typPersoner(x).tele = tele
typPersoner(x).stad = stad
typPersoner(x).mail = mail
List1.AddItem typPersoner(x).namn
Loop
Close #1

End Sub
Private Sub Form_Load()
    cmduppdatera_Click
End Sub
Private Sub List1_Click()
y = List1.ListIndex + 1
MsgBox "Namn: " & typPersoner(y).namn & vbCrLf & "Telefon: " & typPersoner(y).tele & vbCrLf & "Stad: " & typPersoner(y).stad & vbCrLf & "Mail: " & typPersoner(y).mail, vbOKOnly & vbInformation, "Information"
End Sub 

Jag förstår inte varför du använder separata textfiler för namn osv.

Jag gjorde en variant där alla uppgifter sparas i samma fil - "data.txt". När programmet startar så läses alla uppgifter in i en array men bara namnen visas i listan. När du klickar på ett namn så visas alla uppgifter i en msgbox.

EDIT: Såg nu att du tydligen använder VB.NET. Typiskt! Aja. Jag postar koden iallafall ifall någon kanske finner användning för den i VB6.
Citera
2007-11-09, 15:47
  #5
Medlem
Tack Exabyte, det där är exakt den kod jag behöver. Synd som sagt bara att jag arbetar i VB.net. Men det var mitt fel som gjorde tråden i fel forum.

Som sagt, tack ändå.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in