Diskuze: Ukládání list boxu

C# .NET .NET (C# a Visual Basic) Ukládání list boxu American English version English version

Avatar
meteos
Člen
Avatar
meteos:

Dobrý den,
řeším strašně pro mně neřešitelný problém. Je to ukládání ListBoxu nebo ListView a opětovné načítání. Na internetu (konkrétně na http://www.vbnet.cz/…ormular.aspx) jsem našel následující kód:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       If ListView1.SelectedItems.Count = 0 Then Exit Sub 'pokud není vybrána žádná položka, nic neupravovat

       With ListView1.SelectedItems(0)
           Dim dlg As New Dialog1()                                'vytvořit objekt nového okna

           'nastavit do okna hodnoty ze seznamu
           dlg.DateTimePicker1.Value = CDate(.SubItems(0).Text)      'nastavit datum
           dlg.NumericUpDown1.Value = CDbl(.SubItems(1).Text)        'nastavit částku
           dlg.TextBox1.Text = .SubItems(2).Text                     'nastavit popis

           If dlg.ShowDialog() = DialogResult.OK Then              'zobrazit okno a počkat na zavření, pokud je OK, tak ...

               'zjistit hodnoty z okna
               Dim datum As DateTime = dlg.DateTimePicker1.Value   'zjistit datum
               Dim castka As Double = dlg.NumericUpDown1.Value     'zjistit částku
               Dim text As String = dlg.TextBox1.Text              'zjistit popis

               'pokud je částka menší než nula, obarvit položku červeně, jinak ji obarvit černě
               If castka < 0 Then .ForeColor = Color.Red Else .ForeColor = Color.Black
               .SubItems(0).Text = datum.ToShortDateString()            'vypsat datum
               .SubItems(1).Text = castka                               'přidat druhý sloupeček s částkou
               .SubItems(2).Text = text                                 'přidat třetí sloupeček s popisem
           End If
       End With
   End Sub

Chtěl bych podobnou funkci zařídit v C Sharp. Nevíte jak toto napsat v C Sharp a podělíte se o svoje vědomosti? :D:D

 
Odpovědět 25.12.2011 17:40
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na meteos
David Čápka:

Tohle moc nevypadá jako kód co něco ukládá. Cože to vůbec chcete dělat?

Nahoru Odpovědět 25.12.2011 17:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
meteos
Člen
Avatar
Odpovídá na David Čápka
meteos:

Chci udělat to, aby údaje zadané uživatelem do nějakého editu, byly vloženy do ListView nebo ListBoxu a obsah těchto komponent bude uložen například do txt. Po návratu k programu se po stisku tlačítka opět "natáhnou" data do ListView a uživatel je bude moct znovu editovat a přidávat zápisy. Potom svoji práci opět uloží. Pro lepší pochopení posílám jeden projekt v Delphi, jak by to mělo vypadat. http://www.dwn.cz/…-meteorology

 
Nahoru Odpovědět 25.12.2011 18:03
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na meteos
David Čápka:

Tady záleží na tom, co máte v tom ListBoxu uloženého. Pokud tam máte jen nějaké stringy, lze to jednoduše poukládat do textového souboru. Se soubory se rpacuje pomocí objektu StreamWriter, přidejte si na začátek using System.IO.

// uložení:
using (StreamWriter writer = new StreamWriter(new FileStream("soubor.txt", FileMode.Create)))
{
  foreach(string s in listBox1.Items)
  {
    writer.WriteLine(s);
  }
  writer.Flush();
}

// načtení:
listBox1.Clear();
using (StreamReader reader = new StreamReader("soubor.txt"))
{
  string s;
  while ((s = reader.ReadLine()) != null)
  {
    listBox1.Items.Add(s);
  }
}
Nahoru Odpovědět  +1 25.12.2011 18:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
meteos
Člen
Avatar
Odpovídá na David Čápka
meteos:

Mám to vložit jako obsluhu tlačítka?

 void Button1Click(object sender, EventArgs e)
                {
                        listBox1.Items.Add(DateTime.Now+"neco");
                        using (StreamWriter writer = new StreamWriter(new FileStream("soubor.txt", FileMode.Create)))
{
  foreach(string s in listBox1.Items)
  {
    writer.WriteLine(s);
  }
  writer.Flush();
}



                }
 
Nahoru Odpovědět 25.12.2011 19:06
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na meteos
David Čápka:

Kód si logicky vložte tam, kde se má provést. Pokud se má provést při stisknutí tlačítka, pak právě tam ;)

Nahoru Odpovědět 25.12.2011 19:25
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
meteos
Člen
Avatar
meteos:

Dobře, ale kam uložím údaje z editu?

 
Nahoru Odpovědět 25.12.2011 19:42
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na meteos
David Čápka:

Asi vám nerozumím, psal jste, že údaje z editu ukládáte do listboxu.

Nahoru Odpovědět 25.12.2011 19:46
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
meteos
Člen
Avatar
Odpovídá na David Čápka
meteos:

Ano a ten listbox pak celý do souboru. Potom opět vytáhne ze souboru a načte do listboxu.

 
Nahoru Odpovědět 25.12.2011 20:00
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na meteos
David Čápka:

Koukám, že v tom plavete, tak vám to vysvětlím celé :)

Předpokládám, že TextBox (kterému říkáte edit) máte pojmenovaný textBox1 a listbox listBox1. Vložte si na formulář 3 tlačítka: Přidat, Uložit a Načíst. Do nich popořadě vložíte následující kód:

Přidat:

listBox1.Items.Add(Edit1.Text);

Uložit:

using (StreamWriter writer = new StreamWriter(new FileStream("soubor.txt", FileMode.Create)))
{
  foreach(string s in listBox1.Items)
  {
    writer.WriteLine(s);
  }
  writer.Flush();
}

Načíst:

listBox1.Clear();
using (StreamReader reader = new StreamReader("soubor.txt"))
{
  string s;
  while ((s = reader.ReadLine()) != null)
  {
    listBox1.Items.Add(s);
  }
}
Nahoru Odpovědět  +1 25.12.2011 20:13
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
meteos
Člen
Avatar
Odpovídá na meteos
meteos:

Děkuji moc. Vše už funguje, ale co když chci ukládat a opět načítat proměnné a dále s nimi pracovat?

 
Nahoru Odpovědět 25.12.2011 20:56
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na meteos
David Čápka:

No to uděláte úplně stejně, uložíte je do souboru a potom načtete. Jen vynecháte cyklus foreach a do metody WriteLine vložíte proměnná.ToStrin­g(). Musíte trochu zkoušet a pochopit, jak co funguje.

Nahoru Odpovědět  +1 25.12.2011 21:02
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
meteos
Člen
Avatar
meteos:

Děkuji moc. Jdu zkoušet :D:D

 
Nahoru Odpovědět 25.12.2011 21:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.