Články

Tisk článku Tisk článku

Pole, cykly a práce se soubory

[Zpět na kategorii]

Datum: 14. 5. 2007 23:43       Autor: Tomáš Herceg       Zobrazeno: 34254x

Kategorie: Začínáme

Témata: VB.NET

Seriál: VB.NET od začátku - Díl 8.

V tomto díle si vysvětlíme základy práce s komponentou ListView, naučíme se cyklus While a naučíme se používat objekty StreamReader a StreamWriter ke čtení a zápisu do textových souborů. A začneme programovat aplikaci pro správu příjmů a výdajů v domácnostech.


V minulém díle jsme si vysvětlili, jak se pracuje s poli, v tomto díle si ukážeme, jak se pracuje na disku se soubory, jak z nich čteme text a jak jej můžeme do souborů zapisovat. Ještě před tím si ale ukážeme další druh cyklu, a to cyklus While.

Cyklus While

Cyklus While se používá v případech, že potřebujeme opakovat nějaký příkaz tak dlouho, dokud se něco nestane, a jakmile se to stane, opakování skončí a pokračujeme dál. Jeho struktura vypadá následovně:

While <podmínka>
    <příkazy>
End While

Řádky uvnitř cyklu se opakují, zatímco platí podmínka. Jakmile podmínka platit přestane, cyklus se ukončí a pokračuje se dalším příkazem. Nám se to bude hodit při čtení souboru. Budeme totiž číst postupně po řádcích, dokud je nepřečteme všechny. Rozdíl mezi For cyklem a While cyklem je mimojiné v tom, že u For cyklu ještě před jeho zahájením víme, kolikrát se zopakuje. Nemusíme znát konkrétní číslo, ale musíme mít počet opakování v nějaké proměnné. U While cyklu ovšem nevíme, kolik řádků soubor má (a to se rychle zjistit nedá). Zkrátka čteme, dokud nenarazíme na konec souboru. Je to jako když zatloukáte hřebík - dáváte údery kladivem, dokud není hřebík zatlučený, zkrátka opakujete akci úderu kladiva, dokud platí podmínka, že hřebík ještě není zatlučený.

Práce se soubory

Soubory můžeme dělit do různých skupin, nás však zajímá dělení podle typu dat uvnitř souboru. Pokud to velmi zjednoduším, soubory se dělí na textové a binární. Zatím budeme pracovat se soubory textovými, které (jak ostatně z jejich názvu plyne) obsahují text.

 Příjmy a výdaje

Jak asi správně tušíte, napíšeme si velmi jednoduchou aplikaci pro příjmy a výdaje domácnosti. Při tom se naučíme pracovat s komponentou ListView, což je seznam s rozšířenými možnostmi. Data si při startu načteme a při ukončení programu uložíme do textového souboru.

Spusťte si tedy Visual Basic, vytvořte novou Windows Application a v průzkumníkovi projektu klikněte na název projektu pravým tlačítkem a vyberte Add / New Item.... V dialogovém okně pro výběr typu položky vyberte Text File a pojmenujte nový soubor jako database.txt. Po jeho přidání na něj v průzkumníkovi projektu klikněte a jeho vlastnost Copy To Output Directory nastavte na Copy If Newer. Výsledný program se totiž spouští z jiného umístění než máme soubory projektu, tímto nastavením zajistíme, že se tam zkopíruje vždy, když bude třeba.

Nyní na tento soubor dvakrát klikněte, aby se nám otevřel v editoru. Zkopírujte do něj obsah tohoto pole:

10.1.2007
42758
Výplata
13.1.2007
-578
Platba v supermarketu
15.1.2007
-3000
Výběr z bankomatu
19.1.2007
-1000
Výběr z bankomatu
21.1.2007
1200
Moje narozeniny 
23.1.2007
-1000
Elektřina
23.1.2007
-5000
Výběr z bankomatu
24.1.2007
-2000
Výběr z bankomatu
24.1.2007
-340
Plyn - záloha
25.1.2007
-1000
Výběr z bankomatu
26.1.2007
-799
Platba za oblečení
26.1.2007
-600
Voda - záloha
27.1.2007
-11537
Hypotéka

Každý záznam je v souboru zapsán na třech řádcích. První řádek obsahuje datum, druhý částku (kladná = příjmy, záporná = výdaje) a třetí popis finanční operace.

Na formulář si přidejte komponentu ListView. Jak jsem již psal před chvílí, jedná se o rozšířený ListBox, který podporuje obrázky a více sloupců pro jeden záznam, kromě toho dokáže také zobrazit položky jako ikony, stejně jako Průzkumník Windows. Pod tuto komponentu přidejte 3 tlačítka - Přidat, Upravit a Odstranit. Pomocí nich budeme později manipulovat se záznamy v aplikaci.

Načtení dat do seznamu

Načtení dat probíhá při spouštění aplikace, dvakrát tedy klikněte na plochu formuláře (ne na žádnou komponentu ani na titulkový pruh okna). Měla by se vám vytvořit procedura Form1_Load. Pokud ne, kliknuli jste špatně (asi jste měli vybranou nějakou komponentu).

Nyní se musíme naučit pracovat se soubory. Pro čtení souboru použijeme objekt StreamReader. A co že to ten objekt je? No o tom by se dal napsat celý článek. Nám bude stačit, když si prozatím zapamatujeme, že je to jakýsi soubor funkcí, procedur a vlastností, od kterého můžeme vytvořit několik exemplářů (instancí), které jsou na sobě nezávislé. Typickým objektem je třeba tlačítko. Na formulář můžeme umístit 30 tlačítek, která jsou prakticky vzato stejná. Akorát mají každé trochu jiné vlastnosti, takže na každém je jiný text, každé má jinou pozici a třeba i velikost, barvu atd. Ale v principu je to tlačítko a všechna tlačítka dělají to samé. Každé tlačítko je ale na formuláři samostatné, pokud změníme jedno tlačítko, ostatní zůstanou stejná.

Objekt se deklaruje podobně jako proměnná, akorát za slovo As musíme dát ještě slovíčko New, které říká, že se jedná o objekt. Objekty také provádí většinou složitější funkce. Objekt StreamReader slouží ke čtení textových souborů. Vše, co pracuje se soubory, najdeme většinou ve jmenném prostoru System.IO. Jmenné prostory jsou něco jako kategorie nebo složky - oddělují se tečkou a třídí nám všechny součásti .NET Frameworku podle toho, co dělají. Pokud chceme tedy přistupovat k objektu StreamReader, musíme napsat IO.StreamReader. Standardně totiž nemáme System.IO naimportovaný, importy se naučíme později.

Objekt StreamReader má několik metod (což je procedura nebo funkce, která pracuje s tímto objektem). Pro nás je důležitá metoda ReadLine, která přečte ze souboru jeden řádek. Pokud tedy vytvoříme tento objekt a zavoláme tuto metodu, vrátí nám první řádek v souboru. Pokud ji zavoláme znovu, vrátí druhý řádek atd. a tak to pokračuje, dokud nedojdeme na konec souboru. Tento objekt má také vlastnost EndOfStream, která má ze začátku hodnotu False a pokud dojdeme na konec souboru, změní se její hodnota na True. A to je právě podmínka, kterou potřebujeme ve While cyklu. Po přečtení souboru nesmíme zapomenout tento soubor zavřít, aby se zpřístupnil pro ostatní aplikace, a to zavoláním metody Close. K metodám přistupujeme stejně jako k vlastnostem a vlastnosti už známe. Napíšeme název objektu, tečku a pak název metody nebo vlastnosti, se kterou chceme pracovat.

Otevření a zavření souboru vypadá takto (samotné čtení obsahu musí být mezi těmito dvěma řádky):

        Dim soubor As New IO.StreamReader("database.txt")       'otevřít soubor
        soubor.Close()                                          'zavřít soubor

Vytvoření objektu tedy musí obsahovat klíčové slovo New. Některé objekty vyžadují při vytváření ještě zadání nějakých parametrů (ty se píší do závorky a oddělují čárkou, stejně jako u funkcí či procedur).

Upozorňuji raději znovu, že soubor je třeba po dokončení práce s ním zavřít! Rozhodně není dobré spoléhat na to, že s ukončením aplikace se soubor odemkne a bude přístupný ostatním!

Nyní sestavíme While cyklus. Objekt StreamReader má vlastnost EndOfStream, která bude celou dobu False a na konci souboru se změní na True. Podmínka While cyklu ovšem musí mít celou dobu hodnotu True (musí platit) a jakmile se v ní objeví False (platit přestane), cyklus končí. Opakovat tedy musíme, zatímco soubor.EndOfStream = False

Pokud si představíme podmínku a = 6, její význam je jasný. Výsledkem tohoto výrazu je ale hodnota True nebo False. Pokud ale pracujeme s proměnnou typu Boolean, která True nebo False vrací sama o sobě, nemusíme psát a = True, stačí pouze napsat a. Pokud potřebujeme opačný případ, tedy a = False, lze napsat i Not a. Je prakticky jedno, který způsob si vyberete, ale zvyklostí bývá používat a a Not a, je to méně psaní. I já se toho tedy budu držet, je to čistě věc zvyku. Podmínkou našeho While cyklu tedy nebude (i když by mohlo být, funguje to stejně) soubor.EndOfStream = False, ale Not soubor.EndOfStream. Zvláště při čtení souboru až do konce se v drtivché většině případů (i v jiných jazycích) používá raději operátor Not. Je to taková "ustálená konstrukce".

Do předchozího kódu tedy vložíme cyklus a bude to vypadat nějak takhle:

        Dim soubor As New IO.StreamReader("database.txt")       'otevřít soubor
        While Not soubor.EndOfStream        'číst, dokud nejsme na konci souboru
            Dim datum As DateTime = CDate(soubor.ReadLine())    'načíst první řádek z trojice - datum
            Dim castka As Double = CDbl(soubor.ReadLine())      'načíst druhý řádek z trojice - částka
            Dim text As String = soubor.ReadLine()              'načíst třetí řádek z trojice - popis transakce



End While soubor.Close()                                          'zavřít soubor

Nás teď budou zajímat tři řádky uvnitř cyklu. Zakládáme v nich tři proměnné a do každé vložíme jeden řádek. Nejprve načítáme datum (pokud jsme si to ještě neříkali, tak si zapamatujte, že pro datum máme datový typ DateTime). Převodní funkce na datum je CDate. Zavolání metody soubor.ReadLine() vrátí další řádek v souboru.Na druhém řádku je částka, což je číslo (částka může být desetinná, proto Double), načtený řádek musíme opět převést. Třetí řádek načteme normálně, je to text. Převádět tedy nemusíme.

Nastavení komponenty ListView

Než použijeme komponentu ListView jako seznam, musíme jí změnit některé vlastnosti. Nastavte jí tedy vlastnost View na hodnotu Details a poklepejte na vlastnost Columns. V editoru kolekcí přidejte 3 sloupečky (tlačítkem Add) a pokud jeden z těchto sloupečků vyberete, můžete mu nastavovat vlastnosti. Prvnímu tedy nastavte hodnotu vlastnosti Text na Datum, druhému na Částka a třetímu na Popis. Pak klikněte na OK. Roztáhněte ještě sloupečky tak, aby to vypadalo pěkně.

Přidávání položek do ListView

 Komponenta ListView je o něco složitější než ListBox. Jednotlivé položky tohoto seznamu jsou objekty ListViewItem. Pro každou načtenou trojici musíme vytvořit nový objekt této položky seznamu. Objekt ListViewItem má mnoho vlastností, jednou z nich je Text, což je obsah prvního sloupečku. Do něj vložíme datum, automaticky se převede na String. Pokud chceme přidat hodnotu dalšího sloupečku, přidáme ji do vlastnosti SubItems metodou Add. Parametrem je již jen text sloupečku. Postupně tedy přidáme nejprve částku a pak popis. Nakonec nově vytvořenou položku ListViewItem musíme přidat do daného seznamu (nepřidá se sama, pokud by na formuláři bylo více seznamů, nevěděli bychom, do kterého). Přidání provedeme opět předáním položky metodě Add vlastnosti Items komponenty ListView.

Celý kód procedury tedy bude vypadat takto (jiný tam zatím nemáme):

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'načtení vstupu
        Dim soubor As New IO.StreamReader("database.txt")       'otevřít soubor
        While Not soubor.EndOfStream                            'číst, dokud nejsme na konci souboru
            Dim datum As DateTime = CDate(soubor.ReadLine())    'načíst první řádek z trojice - datum
            Dim castka As Double = CDbl(soubor.ReadLine())      'načíst druhý řádek z trojice - částka
            Dim text As String = soubor.ReadLine()              'načíst třetí řádek z trojice - popis transakce

            'přidat položku do seznamu
            Dim polozka As New ListViewItem()                   'vytvořit novou položku seznamu
            If castka < 0 Then polozka.ForeColor = Color.Red    'pokud je částka menší než nula, obarvit položku červeně
            polozka.Text = datum                                'vypsat datum
            polozka.SubItems.Add(castka)                        'přidat druhý sloupeček s částkou
            polozka.SubItems.Add(text)                          'přidat třetí sloupeček s popisem
            ListView1.Items.Add(polozka)                        'přidat položku do seznamu
        End While

        soubor.Close()                                          'zavřít soubor
    End Sub

Pokud program nyní spustíte, uvidíte načtené položky. Výdaje se obarví na červeno kvůli podmínce, která nastaví v případě částky nižší než 0 hodnotu vlastnosti ForeColor na červenou (barva textu).

 Uložení dat

V tomto díle ještě uložíme data a zbytek dokončíme v díle příštím. Abych vás zbytečně nezahlcoval.

Nyní již počet položek známe, takže můžeme provést cyklus For. Počet položek je k mání v ListView1.Items.Count. Položky se ale číslují od nuly (jako ostatně všechno v .NETu). Zápis se provádí pomocí objektu StreamWriter, nový řádek přidáme metodou WriteLine. Opět nezapomeňte soubor zavřít.

V editoru kódu nahoře vyberte v prvním rozbalovacím seznamu položku Form1 Events a ve druhém událost FormClosing, která se spouští během uzavírání formuláře.

Jednotlivé položky jsou uloženy v ListView1.Items, což je tzv. kolekce. Chová se podobně jako pole, ale nemá omezenou velikost a má metodu Add, kterou můžeme položky přidávat na konec. První položku tedy najdeme pod ListView1.Items(0). Každá položka má v sobě svoji kolekci SubItems, což jsou jednotlivé sloupečky dané položky. První obsahuje datum, sruhý částku a třetí popis. Jednoduše je tedy vypíšeme:

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        'uložit data
        Dim soubor As New IO.StreamWriter("database.txt")           'otevřít soubor
        For i As Integer = 0 To ListView1.Items.Count - 1           'projít všechny položky seznamu
            soubor.WriteLine(ListView1.Items(i).SubItems(0).Text)   'zapsat datum
            soubor.WriteLine(ListView1.Items(i).SubItems(1).Text)   'zapsat částku
            soubor.WriteLine(ListView1.Items(i).SubItems(2).Text)   'zapsat popis
        Next
        soubor.Close()                                              'zavřít soubor
    End Sub

Celý program vypadá takto:

První část aplikace Příjmy a výdaje

V příštím díle naprogramujeme tlačítka a umožníme upravovat, přidávat a odstraňovat záznamy. Doufám, že jsou vám po dnešku jasné oba dva cykly, a pokud ne, napište, abych věděl, jestli mám vysvětlovat více nebo to takhle stačí. S objekty si nelamte hlavu, pro začátečníky je to komplikovanější, ale po pár článcích to jistě pochopíte.


> Na začátek

 

Hodnocení:

Hlasů: 54
Zvolte své hodnocení

Tomáš Herceg

Jsem hlavním softwarovým architektem ve společnosti Riganti. Mám dlouholeté zkušenosti s technologiemi ASP.NET, Silverlight, WPF a XNA. Působím též jako lektor ve společnosti Gopas a již třetím rokem jsem držitelem ocenění Microsoft Most Valuable Professional.

Podpořte vznik dalších článků

Související články

DílNázev článku 
Díl 1. Úvod, vývojové prostředí a základní pojmy 25. 4. 2007
Díl 2. Začínáme programovat 25. 4. 2007
Díl 3. Proměnné a datové typy 25. 4. 2007
Díl 4. Podmínky a operátory 26. 4. 2007
Díl 5. Složitější podmínky a rozhodovací struktury 26. 4. 2007
Díl 6. Cyklus For 5. 5. 2007
Díl 7. Pole 9. 5. 2007
Díl 8. Pole, cykly a práce se soubory 14. 5. 2007
Díl 9. Přidáváme druhý formulář 18. 5. 2007
Díl 10. Funkce a procedury 6. 7. 2007
Díl 11. Kolekce a pole 27. 7. 2007
Díl 12. Práce s textem a řetězci 17. 8. 2007
Díl 13. Úvod do grafiky 27. 8. 2007
Díl 14. Vykreslujeme graf 31. 8. 2007
Díl 15. Práce se soubory, úvod do objektově orientovaného programování 19. 11. 2007
Díl 16. Třídy a funkce .NET frameworku, o kterých je dobré vědět 31. 12. 2007
Díl 17. Objektově orientované programování - základy 30. 6. 2008
Díl 18. Dědičnost 6. 10. 2008

RSS Feed RSS Feed

Diskuse

kódování češtiny

Datum: 29.5.2007 3:34
Autor: neregistrovaný (213.180.53.50)
Hodnocení autora: není
Příspěvků: 0
Uvedený příklad s ListView sice funguje, ale při "soubor.ReadLine" se ze souboru "database.txt" nenačtou české znaky, takže texty popisu skončí jako "Vplata", "Vbr z bankomatu"... co s tím, poraďte, prosím
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: kódování češtiny

Datum: 5.6.2007 15:22
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Je to problém s kódováním češtiny. Otevřete tento textový soubor ve Visual Studiu (nebo Visual Basic 2005 Express) a v menu File vyberte Save As. Když se v dialogu pro výběr souboru podíváte na tlačítko Save, najdete tam malou šipečku dolů. Pokud na ni kliknete, rozbalí se kontextová nabídka. Vyberte Save With Encoding a v následujícím okně vyberte jiné kódování. Těžko říci, které to bude, pravděpodobně ANSI (nebo také Windows 1250) nebo UTF-8. S jinými kódováními budou pravděpodobně problémy.
 
           [Odpovědět]
 
Hodnocení: 7 Čekejte, prosím...

Re: Re: kódování češtiny

Datum: 6.6.2007 13:04
Autor: neregistrovaný (213.180.53.50)
Hodnocení autora: není
Příspěvků: 0
Díky, s UTF-8 je čeština OK.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Re: Re: kódování češtiny

Datum: 5.8.2007 22:58
Autor: neregistrovaný (80.250.6.15)
Hodnocení autora: není
Příspěvků: 0
a da se nejak nastavit kodovani primo v programu, pri ukladani, resp. vytvareni souboru?
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: Re: Re: Re: kódování češtiny

Datum: 21.8.2007 12:32
Autor: neregistrovaný (90.176.62.20)
Hodnocení autora: není
Příspěvků: 0
Řešením by mohla být specifikace kodováni při vytváření instance StreamWriteru:

Dim soubor As New IO.StreamWriter("database.txt", True, System.Text.Encoding.UTF32)
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

DataGridView

Datum: 8.9.2007 20:56
Autor: neregistrovaný (213.192.60.25)
Hodnocení autora: není
Příspěvků: 0
Dobrý den,
Váš seriál o VB.NET je opravdu užitečný, doufám, že v něm budete i nadále pokračovat.
Chtěl bych se zeptat, jeslti existuje nějaká možnost, jak využít místo ListView DataGridView ? Předem děkuji za odpověď.
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Re: DataGridView

Datum: 11.10.2007 0:28
Autor: neregistrovaný (85.207.82.139)
Hodnocení autora: není
Příspěvků: 0
Tady je maly priklad v C# jestli ti to pomuze. Plni se tabulka s jednim sloupcem. Cesta s nazvem souboru je v sFileName.


            FileInfo f = new FileInfo(sFileName);
            StreamReader stream = f.OpenText();
            while(!stream.EndOfStream )
            {
                dataGridView1.Rows.Add(new object[] { stream.ReadLine() });
            }
 

Dva sloupce by byly naplneny takto:

dataGridView1.Rows.Add(new object[] { sHodnota1, sHodnota2 });
 
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Ukládání dat

Datum: 15.10.2007 14:50
Autor: David Veselý
Hodnocení autora: 0
Příspěvků: 1
Mám takovou otázku. Vytvořím tedy při běhu programu nějaké záznamy a chtěl bych, aby byly po ukončení programu uloženy. Tak abych až příště spustím program, byly tyto záznamy opět načteny. Jak na to?

Protože nyní ten program po různých úpravách atd záznamy před jeho vypnutím neuloží. Jak na to?

Přehlédl jsem něco v textu? Děkuji za odpověď.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Ukládání dat

Datum: 9.1.2008 13:14
Autor: neregistrovaný (199.64.72.252)
Hodnocení autora: není
Příspěvků: 0
Ahoj, VB sice moc neznám, ale je to ve většině prostředí stejné, takže k zajištění nahrání dat při spištění postačí vložit kód pro načítání ze souboru do eventu: FormCreate, nebo FormOpen (nevím přesně jak to tam je). Takže postup je: V editoru kódu vyberte Form1 Events a ve druhém seznamu událost FormCreate/FormOpen/nebo něco na ten způsob. Pevně věřím, že to tam bude a že to najdete.
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Nepřekrývající se okna

Datum: 16.10.2007 14:35
Autor: neregistrovaný (85.207.121.125)
Hodnocení autora: není
Příspěvků: 0
Dobrý den, procházím si váš zajímavý seriál a u tohoto příkladu, kdy máme poprvé 2 okna, by mě zajímalo, jak docílit toho, aby se okna při spuštění vzájemně nepřekrývala.
Děkuji.
H.R.
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Díl 8.Pole

Datum: 23.3.2008 12:41
Autor: neregistrovaný (217.195.174.14)
Hodnocení autora: není
Příspěvků: 0
Při spuštění programu se mi objeví toto sdělení:
"File Not Found Exeption was unhandled"

Objekt "Databáze.txt" je samozřejmě uložena v adresáři Bin projktu, takže nevím.

milkub
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Re: Díl 8.Pole

Datum: 18.11.2008 20:22
Autor: Pavel Hlávka
Hodnocení autora: 15
Příspěvků: 37
Já si vytvořil textový dokument na ploše WindowsXP a změnil jsem název na io.frg a přesunul jsem ho na céčko. V kódu jsem použil absolutní cestu.


Dim soubor As New IO.StreamReader("C:\io.frg")
            While Not soubor.EndOfStream
            Dim cpv As String = soubor.ReadLine()
            Dim datum_vyst As DateTime = CDate(soubor.ReadLine())
            Dim jmeno As String = soubor.ReadLine()
            
Dim polozka As New ListViewItem()
            If cpv = 1 Then polozka.BackColor = Color.Green 
            If cpv = 2 Then polozka.BackColor = Color.RoyalBlue
            If cpv = 3 Then polozka.BackColor = Color.Red
            polozka.Text = cpv               
            polozka.SubItems.Add(datum_vyst)
            polozka.SubItems.Add(jmeno)
            ListView1.Items.Add(polozka)
          End While

        soubor.Close()
 
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Sort v ListView

Datum: 10.10.2008 14:45
Autor: Jakub Němec
Hodnocení autora: 88
Příspěvků: 151
Zdravim,
udělal jsem na listview sort(sestupný) podle datumu,ale bohužel se to neřadí správně.Nebere se hodnota datumu,ale prvního čísla.Tz.že např. 10.5.2008 by bylo dříve jak 2.5.2008
netuší někdo?

díky
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

ListView

Datum: 7.11.2008 12:08
Autor: neregistrovaný (193.165.151.90)
Hodnocení autora: není
Příspěvků: 0
Jak napsat tento program aby mohlo více počítačů číst a ukládat do jednoho společného textového souboru s použitím komponenty ListView a aby změny které provedl jeden uživatel nezrušil uživatel druhý který současně uložil soubor.

Díky

Pavel
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

deklarácie premenných

Datum: 20.11.2008 14:08
Autor: neregistrovaný (158.195.44.5)
Hodnocení autora: není
Příspěvků: 0
Dobrý deň,
myslím si, že deklarovať premenné vnútri cyklu nie je dobré (mám skúsenosti s VB6, tam to evidentne zdržuje, predpokladám, že vo VB.NET je to obdobné). Nebolo by lepšie najskôr zadefinovať premenné a vnútri cyklu do nich už len vkladať dáta?

napr. miesto tohoto kódu:

for i = 1 to 1000
  Dim a as Integer
  a = a + i
next i
 

ja by som to napísal takto:

Dim a as Integer
for i = 1 to 1000
  a = a + i
next i
 

Dave.
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Re: deklarácie premenných

Datum: 20.11.2008 14:11
Autor: neregistrovaný (158.195.44.5)
Hodnocení autora: není
Příspěvků: 0
PS. Pozor ide o princíp, samozrejme že po zbehnutí kódov a bude obsahovať iné číslo :(
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: deklarácie premenných

Datum: 20.11.2008 15:36
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Oba kódy, které jste sem poslal, nedělají to samé. Pokud nadeklaruji proměnnou uvnitř cyklu, pak to dělám v případě, že to potřebuji. Jakmile daný krok toho cyklu skončí, proměnná nadeklarovaná uvnitř přestane existovat a v dalším kroku se vytvoří znovu. Funguje a dá se použít pouze uvnitř tohoto cyklu a v rámci jednoho kroku, hodnoty si nepamatuje. Jistěže deklarace proměnné má nějakou režii, ale ta je ve VB.NET zanedbatelná, řádově rychlejší než ve VB6. Nadeklarovat proměnnou uvnitř a vně cyklu je ve VB.NET naprosto stejně rychlé, akorát ty uvnitř cyklu se vytváří víckrát. Dávejte pozor, abyste uvnitř cyklů nevytvářeli objekty, pokud to opravdu nepotřebujete (dost často je to účel, vytvořit víc objektů, někdy ale potřebujete pracovat pouze s jedním).
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: deklarácie premenných

Datum: 21.11.2008 14:06
Autor: David Krcmar
Hodnocení autora: -1
Příspěvků: 4
No upravim to teda tak, aby oba kody robili to iste (ten predchadzajuci prispevok je moj, len som sa vtedy neprihlasil):


While Not soubor.EndOfStream 
Dim datum As DateTime = CDate(soubor.ReadLine())
End While
 

nebolo by to lepsie takto?:


Dim datum As DateTime

While Not soubor.EndOfStream 
DateTime = CDate(soubor.ReadLine())
End While
 

V prvom pripade totizto musi program xkrat deklarovat aj zapisat hodnotu do premennej, v druhom pripade deklaruje len raz. Aj ked zdeklarovanie premennej urobi aj jej "vynulovanie", ak som ju uz predtym pouzival.
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: deklarácie premenných

Datum: 14.5.2009 9:43
Autor: neregistrovaný (194.228.235.12)
Hodnocení autora: není
Příspěvků: 0
Souhlasím,
myslím, že učit začátečníku, deklarovat proměnné v cyklu,
je principialní chyba. Je to výuka špatného návyku v programování.

Naopak by se před tím mělo varovat, stejným způsobem jako autor správně opakovaně zdůrazňuje potřebu uzavírání souboru.

Samozřejmě, že v krátkých cyklech to v¨nevadí,
ale začátečník je schpen to pak použít i v cyklech velmi rozsáhlých aniž mu dojdou důsledky.

No, nikdo nejme dokonalí. :-)

Jinak díky moc autorovi za seriál, též přecházím z VB6 a je pro mě velkým přínosem.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: deklarácie premenných

Datum: 14.5.2009 9:53
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Co je špatného na deklaraci proměnné v cyklu? Jaké špatné důsledky to má? Tady naopak je potřeba v každém průchodu cyklu vytvořit novou ListViewItem a jestli si na ni udělám novou proměnnou, která se po skončení průchodu cyklem zase zruší, nebo na to mít jednu, je úplně jedno, nezabere ani o bajt paměti víc.
 
           [Odpovědět]
 
Hodnocení: 2 Čekejte, prosím...

Re: deklarácie premenných

Datum: 19.5.2009 9:32
Autor: neregistrovaný (86.49.57.225)
Hodnocení autora: není
Příspěvků: 0
Myslim, ze to kolega pred Vami vysvetlil pomerne jasne.

Jde o principalni chybu (slusne receno). Ze to nesezere byte pameti navic je irelevantni - navic efektivita kodu se nemeri jen obsazenou pameti...

Ucite tu zacatecniky spatnym navykum.

Proc je to spatny navyk tu uz nekdo take zminil: az Vam v te smycce nekdo zacne vytvaret slozity objekt a nebude mit ani tucha, ze je neco spatne, muzou uzivatele dekovat hadejte komu. A spolehat se na .NET je jizda po tenkem lede. Takze si to prosim neberte osobne a uvedenou vec napravte.

A mmch: je to pro zacatecniky, ale asi by se sluselo zminit alespon elementarni bezpecnost vyvoje kodu. Pokud Vam do database.txt sahnu a uprostred smazu jedinou radku, zacnou se dit veci, ze? Spolehat se na vlastni konstrukt plavouci na vode totiz patri k dalsim zlym navykum. A pokud pracujete v tymu, muze Vas to osklive vytrestat. Nezadam implementaci, ale alespon poznamka na okraj by nebyla od veci.


Hezky zbytek dne,

Adam F.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: deklarácie premenných

Datum: 19.5.2009 10:10
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Slovní spojení principiální chyba mi přijde jako klišé. V čem je ta chyba? Ještě nikdo mi to nevysvětlil. Proč je to špatný návyk?

Deklarace proměnné uvnitř cyklu ve skutečnosti vůbec nezpomaluje - tohle vyoptimalizuje kompilátor, nebude tím kynout paměť a bude se to chovat úplně stejně. Zvláště když je to hodnotový typ.
Je nutné si uvědomit, že proměnná platí pouze v bloku kódu, kde je deklarována. Pokud ji napíšete do For cyklu, platí pouze v rámci jednoho kroku.
Naprosto logické mi přijde deklarovat proměnnou, kterou používáme pouze v rámci jednoho kroku, uvnitř tohoto kroku For cyklu - tím naznačujeme, co proměnná dělá. Pokud v každém kroku potřebujeme s tou proměnnou něco udělat, je to něco jiného a proměnná platí po celou dobu cyklu, deklarujeme ji tedy vně.
To, že se proměnné uvnitř cyklů nebo bloků dělat nemají, je hloupost - vadí to hlavně Delphíčkářům, protože ti museli vždy všechny proměnné deklarovat na začátku procedury. V .NETu je to irelevantní.
Váš argument s tím, že pak začátečníci v každém kroku dělají tuny objektů, což je zbytečné, platí jak kdy.
V tomto konkrétním případě potřebujeme vytvořit pro každý krok cyklu novou ListViewItem, je to tedy vytváření objektů v cyklu a je to nezbytné.
Samozřejmě pokud bychom vytvářeli nějaké pomocné objekty (třeba FileInfo, Bitmap nebo tak něco), které se dají znovupoužívat, je věc jiná, to by se dělat nemělo, ale v této situaci je to irelevantní.

Co se týče ochrany proti chybám v souboru, je to samozřejmě pravda, poznámka do čláknu by se hodila, ale nemůžete po začátečnících chtít, aby z nich vypadnul profesionální kód. Většina lidí u programování dlouho nevydrží a cílem těchto článků je hlavně, aby je to začalo bavit. Kontrola chyb v textovém souboru by celý kód výrazně zkomplikovala, správně by se ještě měly ošetřovat výjimky, minimálně IOException atd., ale tím bych odváděl pozornost od konkrétního problému, který tento článek řeší, a začátečníci by se v tom akorát ztratili a bylo by to k ničemu.

Za připomínky děkuji, ale deklarace proměnných a vytváření objektu je podstatný rozdíl (i když ve VB.NET, v C# je ten rozdíl vidět víc). Vezmu to v úvahu při revizi těchto článků, ke které se chystám.
Ale přesto trvám na tom, že na deklaraci proměnné uvnitř cyklu není nic špatného.
 
           [Odpovědět]
 
Hodnocení: 5 Čekejte, prosím...

Re: deklarácie premenných

Datum: 29.4.2011 10:21
Autor: neregistrovaný (83.208.20.59)
Hodnocení autora: není
Příspěvků: 0
Tohle mi není jasné jak to funguje.

for i = 1 to 10
  Dim Neco As Integer
 ...
 ...
Next
 

Znamená to že se v každém cyklu proměnná "Neco" deklaruje 10x?
To je blbost ne? Proč by se to dělalo? Stačí to přece jednou před cyklem.

Zkouším tohle:

Module Module1

    Sub Main()

		Dim Vysledek As Integer
		Dim Cyklus As Integer


		For Cyklus = 1 To 10

			Dim Cislo As Integer
			Dim Mezisoucet As Integer

			Cislo = 5
			Mezisoucet = Cislo + Cyklus
			Cislo += Vysledek

			Vysledek = Mezisoucet + Cislo
		Next


		Console.Write("Pokus")
		Console.WriteLine(Vysledek)
	End Sub

End Module
 
Proměnné Cislo a Mezisoucet si pamatuji hodnotu, takže se nedeklarují znovu.

Ale po úpravě na:

  Dim Cislo As Integer = 10
  Dim Mezisoucet As Integer = 10
 
se proměnné inicializují v každém cyklu.

Zrovna píšu na převod řetezce ze souboru do DB. Docela fuška. V cyklech mám takových proměných několik: mezisoucet, PrevodTextNaCislo, PrevodAdres, RadekZeSouboru ... hodne se tim zprehledni program.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Název aplikace

Datum: 21.2.2009 20:27
Autor: neregistrovaný (82.100.0.234)
Hodnocení autora: není
Příspěvků: 0
pusťte si tedy Visual Basic, vytvořte novou Windows Application a v průzkumníkovi projektu !!!klikněte na název projektu!!! pravým tlačítkem a vyberte Add / New Item.... Dobrý den, mohl byste mi prosím vysvetlit kam mám vlastně kliknout?? kde najdu ten název projektu
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Název aplikace

Datum: 1.3.2009 19:18
Autor: neregistrovaný (78.102.106.230)
Hodnocení autora: není
Příspěvků: 0
Solution Explorer (Ctrl-ALT-L) - prave tlacitko na nazev
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

zla datova konverze

Datum: 9.4.2009 20:55
Autor: neregistrovaný (195.91.55.249)
Hodnocení autora: není
Příspěvků: 0
ahojte, neviete mi niekto poradit , ked stlacim F5, program mi pise takuto hlasku :

Conversion from string "15.1.2007" to type 'Date' is not valid.

a nasledovne nebezi, predpokladam, ze mam nieco, zle, ale neviem prist na to ako to mam opravit.

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'načtení vstupu
Dim soubor As New IO.StreamReader("database.txt") 'otevřít soubor
While Not soubor.EndOfStream 'číst, dokud nejsme na konci souboru
Dim datum As DateTime = CDate(soubor.ReadLine()) 'načíst první řádek z trojice - datum
Dim castka As Double = CDbl(soubor.ReadLine()) 'načíst druhý řádek z trojice - částka
Dim text As String = soubor.ReadLine() 'načíst třetí řádek z trojice - popis transakce

'přidat položku do seznamu
Dim polozka As New ListViewItem() 'vytvořit novou položku seznamu
If castka < 0 Then polozka.ForeColor = Color.Red 'pokud je částka menší než nula, obarvit položku červeně
polozka.Text = datum 'vypsat datum
polozka.SubItems.Add(castka) 'přidat druhý sloupeček s částkou
polozka.SubItems.Add(text) 'přidat třetí sloupeček s popisem
ListView1.Items.Add(polozka) 'přidat položku do seznamu
End While

soubor.Close() 'zavřít soubor
End Sub
End Class
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

excel

Datum: 18.5.2009 22:05
Autor: neregistrovaný (88.100.109.83)
Hodnocení autora: není
Příspěvků: 0
Dobry den, mel bych dotaz. Jak muzu ulozit text, ktery je videt pri otevreni souboru pomoci programu excel, z formatu xlsx do nejake promenne? Metoda readline objektu typu streamreader mi cte vsechny znaky, takze ten normalni text je k nepoznani.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Prosím o vysvětlení k lekci 8 pro začátečníky

Datum: 24.6.2009 8:37
Autor: neregistrovaný (81.246.96.109)
Hodnocení autora: není
Příspěvků: 0
Pracuji s Visual Basic.net (Verze 2003), nepodařilo se mi při programování prográmku příjmy a výdaje nastavit ve vlastnostech u souboru database.txt Copy To Output Directory na Copy If Newer.Nevím kde to nastavit nenašel jsem to. Jsem úplný začátečník a jedu postupně Váš 18 dílný trénink, který CHVÁLÍM ! Je pro mě přehledný a do Lekce 8 jsem neměl žádný problém.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Prosím o vysvětlení k lekci 8 pro začátečníky

Datum: 2.7.2009 17:19
Autor: neregistrovaný (88.100.109.83)
Hodnocení autora: není
Příspěvků: 0
V solution exploreru oznac soubor database.txt a v okne Properties je vlastnost Copy to Output, (druha zezhora,) hned vedle je Do not copy. Misto toho vyber Copy if newer.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Uložení dat

Datum: 10.8.2009 16:02
Autor: neregistrovaný (89.102.233.32)
Hodnocení autora: není
Příspěvků: 0
Vytvořil jsem si takovýho správce hesel, všechno funguje jen na jeden problém. ListView má 3 sloupce z textem, jak je uložit aby se při dalším spuštění načetli?
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Narozeniny

Datum: 16.8.2009 18:27
Autor: neregistrovaný (77.78.75.2)
Hodnocení autora: není
Příspěvků: 0
Koukam, že jsem asi trochu z jiného světa... u mě položka moje narozeniny znamená většinou výdaj, nikoli příjem :D.
Jinak díky za nápad deklarovat proměnnou uvnitř cyklu, nenapadlo by mě to z obavy deklarovat porměnou stejného názevu vícekrát, netušil jsem, že platí pouze pro konkrétní cyklus.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

deklarace proměnných

Datum: 23.8.2010 14:55
Autor: Jiří Královec
Hodnocení autora: 3
Příspěvků: 3
Debaty o tom, kde má být provedena deklarace proměnné, zda vně či uvnitř cyklu se mi zdá autorem článku dostatečně objasněna a není potřeba se v tom dále šťourat. Rovněž tak připomínky k zranitelnosti takovéhoto programu.......jedná se přece o příklad pro začátečníka a není ho potřeba zahlcovat hned všemi problémy, které se na něj sesypou. Já naopak oceńuji to, že autor jde po podstatě problému, který zrovna vysvětluje. Díky...
 
           [Odpovědět]
 
Hodnocení: 3 Čekejte, prosím...

jinej zápis

Datum: 30.12.2010 1:13
Autor: neregistrovaný (85.71.10.78)
Hodnocení autora: není
Příspěvků: 0
Zdravim. :)

co když mám ten .txt soubor zapsanej třeba
jmeno,1,2,3
jmeno,2,4,5,6
a nebudu to mít jednotlivě pod sebou ? jak to potom načtu do listview ?

 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

re

Datum: 30.12.2010 1:39
Autor: neregistrovaný (85.71.10.78)
Hodnocení autora: není
Příspěvků: 0
napadlo mě udělat tohle

     Dim soubor As New IO.StreamReader("jmena.txt")
        While Not soubor.EndOfStream

            Dim text As String = soubor.ReadLine()
            Dim vysl() As String = text.Split(",")


            Dim polozka As New ListViewItem()

            polozka.Text = vysl(0)
            polozka.SubItems.Add(vysl(1))
            polozka.SubItems.Add(vysl(2))
            polozka.SubItems.Add(vysl(3))
            polozka.SubItems.Add(vysl(4))
        
            ListView1.Items.Add(polozka)
        End While
 
jenže když na jednom radku mam
jmeno,1,2
min čárek tak mi to hodi chybu
a kdyz to budu dělat tim ze tam dam carky navic tak to se mi zrovan nechce
jmeno,1,2,,
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: re

Datum: 30.12.2010 11:13
Autor: neregistrovaný (88.208.88.196)
Hodnocení autora: není
Příspěvků: 0
Jinak než doplňovat prázdné čárky to udělat nejde.Je to standardní postup - nebuďte líný,akorát si tak přiděláte problémy.Takto se standardně dělají formáty csv nebo exporty z DB.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: re

Datum: 30.12.2010 13:13
Autor: neregistrovaný (85.71.10.78)
Hodnocení autora: není
Příspěvků: 0
ok a když mám třeba v dokumentu na konci nějaký znak a za tim znakem koment jak mám nastavit aby to četlo až po ten znak místo readtoend kterej čte do konce souboru nejspíš nějak přas IndexOf ale nevim jak to zapsat
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

otazka

Datum: 5.2.2011 15:50
Autor: neregistrovaný (77.247.224.25)
Hodnocení autora: není
Příspěvků: 0
ahoj
-som uplny amater co sa tyka programovania ale bavi ma to a chcem sa naucit zaklady podla tychto vasich "navodov" ..
zatial som nemal ziadny problem, az do teraz ..

pri vasom vysvetleni mi ide uplne vsetko tak ako ma, a aj ked som zmenil jednu vec:

Dim A As New IO.StreamWriter("C:\test.txt")
        A.WriteLine("skuska")
        A.Close()
 
-zatial vsetko ok.
ale pytam sa , da sa to urobit tak aby ("C:\test.txt") som nahradil premennou a tym vlastne vybral priamo v spustenom programe , ze kam sa ten ???.txt subor ma zapisat ?
skusal som to formou comboboxu ale vobec som si s tym nevedel rady ..
program sa spustil , ale ked som stlacit buton pre zapisanie - padol !

vyzeralo to nejak takto :

 Dim C As String
        C = CStr(ComboBox1.SelectedItem)

        Dim A As New IO.StreamWriter(C)
        A.WriteLine("skuska")
        A.Close()
 

dakujem a chvalim autora sa vemi pekne spracovane navody !!
STANDO
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Změna koncevek souborů

Datum: 28.4.2011 22:17
Autor: neregistrovaný (188.75.178.2)
Hodnocení autora: není
Příspěvků: 0
Ahoj, chtěl jsem se zeptat jestli jde ve VB.net změnit koncovka např. ze *.txt na *.html ?
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

overeni pritomnosti database

Datum: 7.7.2011 23:09
Autor: Tomas
Hodnocení autora: 0
Příspěvků: 2
Bylo by fajn, kdyby program na zacatku overil pritomnost souboru database.txt aby to nehazelo chybu, kdyz tam neni. Pokud nenalezne, aby nabidl jeho vytvoreni...
Nema nekdo tuseni jaka funkce to dela? :)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: overeni pritomnosti database

Datum: 8.7.2011 12:27
Autor: Adam Lasák
Hodnocení autora: -22
Příspěvků: 31
Setkal jsem se s blokem příkazů Try...Catch
Př.:

Try      'zachytit chyby
'příkazy, kde víte, že by se mohla stát chyba, třeba 
'se nevyhledá database.txt
Catch
'příkazy, které se spustí pokud se chyba stane. Např.:
MsgBox("Vytvořte textový soubor!")
Finally
'příkazy, které se spustí ať už chyba nastane nebo ne
End Try
 
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Chyba

Datum: 9.7.2011 12:44
Autor: neregistrovaný (81.30.255.189)
Hodnocení autora: není
Příspěvků: 0
Dobrý den,
Když jsem napsal veškerý zdrojový kód, přesně do písmene a chtěl spustit program tak mi to napsalo tuhle chybu:
Error While trying to run project: Nelze načíst soubor nebo sestavení Pole\,Cykly a práce se soubory nebo jeden z jejich závislých prvků. Zadaný název sestavení nebo základ kódu byl neplatný. (Vyjímka na základě hodnoty HRESULT:0x80131047)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

System.IO.StreamReader vs IO.StreamReader

Datum: 11.9.2011 11:25
Autor: neregistrovaný (90.178.20.222)
Hodnocení autora: není
Příspěvků: 0
Zdravim, tak jsem z toho malinko zmatený co jsem udělal. Mám sestavený kód podle předlohy:

Dim soubor As New IO.StreamReader("database.txt")

Tak se mi VB zastavil na podmíce while not soubor.endofstream, že si mám zkontrolovat jestli není soubor již uzavřen, že nemůže číst. Zkusil jsem změnit kód na:

Dim soubor As New System.IO.StreamReader("database.txt")

A najednou to maká. Nejzajímavější je, že když jsem slovo System. posléze umazal, čili to bylo jako předtím, tak to funguje bez problémů... Je mi to zvláštní..

BTW pod mozilla Firefox v6.0.2. nejsou vidět tlačítka, proto kód píšu jako text..)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

cesta k textovýmu souboru

Datum: 28.9.2011 21:09
Autor: neregistrovaný (88.102.114.153)
Hodnocení autora: není
Příspěvků: 0
Dobrý den, chci se zeptat jestli jde nastavit univerzální cesta k textovýmu souboru.

Dim file As String = "C:\Users\owner\Desktop\ukladani.txt"
Dim reader As StreamReader = New StreamReader(file, System.Text.Encoding.UTF8)

Myslím tím, abych mohl program přenášet na víc počítačů a neměnit pořád cestu k textovýmu souboru. Určitě vím, že by mělo jít, aby se cesta automaticky upravila na stejnou cestu jako je uložen samotný program. Bohužel jsem na to ve VB nepřišel.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Vďaka

Datum: 11.11.2011 0:15
Autor: neregistrovaný (158.197.204.56)
Hodnocení autora: není
Příspěvků: 0
Chcem sa pekne poďakovať za tento perfektný seriál. Veľmi oceňujem jednoduchosť a zrozumiteľnosť písania článkov s ohľadom na úplných začiatočníkov. Je to veľmi hodnotný seriál, dúfam, že bude pokračovať. Ešte raz ďakujem.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.