Přidáváme druhý formulář

9. díl - Přidáváme druhý formulář

Tomáš Herceg       18.05.2007       VB.NET, Komponenty, WinForms       24819 zobrazení

V tomto díle dokončíme naši aplikaci pro správu domácího účetnictví a vysvětlíme si, co to jsou třídy a jak vlastně fungují. Kromě toho se naučíme With blok a práci s více formuláři.

Většina aplikací má více formulářů. V jazyce Visual Basic 6 a ve starších verzích se s formuláři pracovalo trochu jinak, Visual Basic .NET používá trochu jiné metody (které jsou podle mě logičtější a použitelnější, je to ale spíše věc zvyku). Právě kvůli tomu na Visual Basic .NET mnoho programátorů ze starších verzí nadává, ale my se tím nenecháme odradit a vysvětlíme si, jak se s formuláři pracuje ve Visual Basic .NET a proč je to právě takto.

Třídy

Staré programovací jazyky používaly takzvané strukturované programování, což je prakticky to, co jsme se naučili až dosud, ovšem bez objektů. Ještě tam patří funkce a procedury, které se naučíme v díle příštím. Později se však ukázalo, že by se hodilo používat objekty, čemuž se říká objektově orientované programování. Tento styl programování používají prakticky všechny běžně používané jazyky. Abychom pochopili, jak objekty fungují, musíme si vysvětlit, co jsou to třídy. A začneme pěkně na příkladu.

.NET Framework obsahuje třídu Button (tlačítko), což je obecná komponenta, kterou můžeme "plácnout" na formulář. Tato třída není nic jiného, než několik vlastností, funkcí, procedur a událostí, ke kterým můžeme přistupovat zvenku, tato třída ale obsahuje také proměnné, které jsou pouze vnitřní a není žádoucí, aby k nim mohl přistupovat někdo jiný, než právě toto tlačítko.

Vlastnosti již známe. Upravují a mění vlastnosti komponenty, většinou slouží k nastavení hodnot vnitřních proměnných, ale nemusí to platit vždy. Události jsou takové "záchytné body", na které můžeme "pověsit" nějakou proceduru, která se spustí, jakmile dojde k té události. Například pokud klikneme na tlačítko, událost Click zavolá proceduru Button1_Click, pokud vytvoříme na formuláři tlačítko a dvojklikem vytvoříme proceduru této události. Funkce je úsek kódu, který může dostat nějaké vstupní parametry. Pokud funkci zavoláme a předáme jí potřebné parametry, tento úsek kódu se provede (většinou něco spočítá) a vrátí výsledek. Procedura je vlastně funkce, která výsledek nevrací (jenom něco udělá).

A naše třída Button je právě soubor těchto vlastností, událostí, funkcí, procedur a vnitřních proměnných, který je někde popsán a který nám umožňuje vytvořit libovolné množství objektů. Tyto objekty, které jsou od této třídy (je to vlastně takov šablona) odvozené, mají stejné vlastnosti, události atd. jako tato třída a tyto vlastnosti, události atd. mění pouze ten konkrétní exemplář (instanci) daného objektu nezávisle na objektech ostatních. Třída jako taková nikde fyzicky neexistuje, je to pouze jakási šablona, podle které se vytváří objekty.

Pokud tedy na formulář přidáme 5 tlačítek, každé z nich je objekt odvozený od třídy Button, všechny mají stejné vlastnosti, události atd. Ale pokud klikneme na jedno tlačítko, spustí se pouze jeho události Click, ostatním ne. Pokud jednomu zmníme text, ostatním text zůstane. Zkrátka všechna tlačítka vypadají stejně a dělají to samé, ale jsou na sobě nezávislá.

Samozřejmě třídy se používají téměř všude, ne pouze pro nějaké vizuální objekty. Již jsme používali StreamReader a StreamWriter, což jsou třídy, jejichž objekty slouží k práci se soubory. Nijak nevypadají a nikde se nezobrazují. Jen základní princip je stejný.

A jak to souvisí s druhým formulářem?

Každé tlačítko je objekt nějaké třídy. A objekt může obsahovat i další objekty. Formulář je totiž také objekt, který má mimo jiné vlastnost Controls, což je kolekce (něco jako pole, podrobněji se o kolekcích budeme bavit později) komponent, které na něm jsou.

Když navrhujeme ve Visual Studiu formulář, nevytváříme ale objekt. Vytváříme definici třídy. Pokud ale máme standardní nastavení projektu, někde v pozadí se nám vytvoří objekt třídy Form1 a zobrazí se. Jakmile jej ukončíme, ukončí se celý program. To ale není jen tak samo od sebe, Visual Basic .NET na pozadí vygeneruje nějaký kód, který ovšem nevidíme. Pokud bychom ale chtěli, mohli bychom si vytvořit další objekt třídy Form1 a pokud bychom ho zobrazili, uvidíme dva identické formuláře Form1 i s komponentami, které jsme navrhli. Pokud ale jeden změníme, druhý se nezmění. Jak správně tušíte, můžeme si tedy vytvořit druhý formulář a v okamžiku, kdy jej chceme zobrazit, vytvoříme nový objekt třídy druhého formuláře. Takže je to poměrně jednoduché a logické, pokud se smíříme s třídami a objekty.

Otevřete si tedy projekt z minula a v průzkumníkovi projektu klikněte pravým tlačítkem na název tohoto projektu a vyberte Add / New Item. Ze seznamu objektů vyberte Dialog a potvrďte tlačítkem OK. Tím se nám do projektu přidá druhý formulář, který bude sloužit k přidávání a úpravě záznamů. Mohli bychom vybrat Windows Form, ale nám se více hodí Dialog, má již připravená tlačítka. Ale jinak je to normální formulář.

Přidejte na něj komponenty podle obrázku:

Návrh formuláře 2

Komponentě NumericUpDown nastavte vlastnost Minimum na -100000, Maximum na 100000 a DecimalPlaces na 2. Tato komponenta je určena pro čísla a kontroluje nám, jestli je číslo ze zadaného rozsahu. DateTimePicker slouží k pohodlnému výběru data.

To je celé, teď se nahoře v záložkách přepněte zpět na první formulář.

Přidávání nového záznamu

Dvakrát tedy klikněte na tlačítko Přidat a napíšeme kód pro zobrazení okna, získání hodnot, které uživatel zadal, a nakonec vložení do seznamu. Vytvoříme tedy nový objekt třídy Dialog1, což je naše dialogové okno, které jsme vytvořili. Každý formulář má funkci (někdy se jí také říká metoda) Show a ShowDialog. Pokud totiž objekt vytvoříme, neukáže se na obrazovce hned. Musíme právě zavolat jednu z těchto metod, abychom jej zobrazili. Každá se ovšem chová trochu jinak.

Show zobrazí formulář, se kterým můžeme pracovat nezávisle na formuláři prvním. Další příkazy za zavoláním této metody se provedou ihned. To se nám ale v tomto případě příliš nehodí.

ShowDialog zobrazí druhé okno a čeká, než jej zavřeme. První okno je zamknuté a nemůžeme s ním manipulovat, dokud druhé nezavřeme. Jakmile druhé okno zavřeme, provedou se teprve příkazy za zavoláním této metody v prvním okně. Provádění kódu v prvním okně se tedy pozastaví do doby, než dialog zavřeme. A právě to potřebujeme.

Okna navíc mohou i vracet výsledky. Nejčastěji se používá hodnota DialogResult.OK (pokud jsou změny v okně platné) a DialogResult.Cancel (pokud byly změny stornovány). Protože jsme přidali okno Dialog, o toto se již nemusíme starat. Pokud se podíváte na procedury událostí u tlačítek v tomto dialogu, Visual Basic už vygeneroval vracení hodnoty za nás a my se o něj nemusíme starat. Ale opět za tím stojí nějaký kód, není to jen tak samo sebou. Výhoda je, že tento kód nemusíme psát my.

Výsledek, který okno vrátilo, je zároveň návratová hodnota volání metody ShowDialog. Vytvoříme tedy podmínku - pokud je tato návratová hodnota rovna hodnotě DialogResult.OK, znamená to, že jsme kliknuli na tlačítko OK a že tedy chceme záznam opravdu přidat. Uvnitř této podmínky zjistíme hodnoty v jednotlivých komponentách a vytvoříme řádek v seznamu, jak jsme se to naučili v minulém díle.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dlg As New Dialog1()                                'vytvořit objekt nového okna
        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

            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.ToShortDateString()   '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 If
    End Sub

Pokud jsou komponenty na formuláři, kde právě jsme, stačí pouze napsat název komponenty. Pokud jsou jinde, musíme před to dát i objekt toho formuláře (takže dlg, ne Dialog1). dlg je objekt, Dialog1 je třída. Pak už je vše stejné. Vytvoříme si novou položku seznamu, tedy ListViewItem a naplníme ji daty. Nakonec ji přidáme do kolekce položek Items v komponentě ListView. Jediná změna je použití metody ToShortDateString na proměnné datum. Komponenta DateTimePicker vrací i čas, který nás nezajímá. Proto datum převedeme touto metodou na krátký formát tak, jak je všude (5.5.2007, dlouhý by byl 5. května 2007). Při načítání ze souboru nemusíme, tam se ukládá pouze datum, čas už ne.

Úprava záznamu

Upravení záznamu bude velice podobné. Vytvoříme objekt formuláře a před tím, než jej zobrazíme, nastavíme do jeho komponent hodnoty z vybrané položky v komponentě ListView. Po zobrazení nebudeme novou položku vytvářet, ale nastavíme nové hodnoty té stávající.

ListView podporuje výběr více položek najednou. To se nám momentálně nehodí, takže nastavte v režimu návrhu hodnotu vlastnosti MultiSelect na hodnotu False. Položky, které jsou právě vybrané, jsou ve vlastnosti SelectedItem komponenty ListView. Může jich být totiž více, vlastnost SelectedItems je totiž kolekce. Může ale také nastat situace, kdy není vybraná žádná položka. To zjistíme jednoduše, protože hodnota SelectedItems.Count bude rovna nule. Count je totiž počet položek v kolekci. Pokud je nula, kolekce je prázdná a tedy žádné položky nejsou vybrány. Pokud je vybrána nějaká položka, najdeme ji v SelectedItems(0). Více položek vybrat nelze, protože jsme to zakázali. Celá procedura úpravy záznamu tedy bude vypadat takto:

    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

        Dim dlg As New Dialog1()                                'vytvořit objekt nového okna
        'nastavit do okna hodnoty ze seznamu
        dlg.DateTimePicker1.Value = CDate(ListView1.SelectedItems(0).SubItems(0).Text)      'nastavit datum
        dlg.NumericUpDown1.Value = CDbl(ListView1.SelectedItems(0).SubItems(1).Text)        'nastavit částku
        dlg.TextBox1.Text = ListView1.SelectedItems(0).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 ListView1.SelectedItems(0).ForeColor = Color.Red Else ListView1.SelectedItems(0).ForeColor = Color.Black
            ListView1.SelectedItems(0).SubItems(0).Text = datum.ToShortDateString()            'vypsat datum
            ListView1.SelectedItems(0).SubItems(1).Text = castka                               'přidat druhý sloupeček s částkou
            ListView1.SelectedItems(0).SubItems(2).Text = text                                 'přidat třetí sloupeček s popisem
        End If
    End Sub

Toto tedy fungovat bude, ale upřímně řečeno, moc se vám to určitě nelíbí. Některé kousky ListView1.SelectedItems(0) se tam opakují příliš často. Tomu se ale dá vyhnout, pokud použijeme With blok. Je to snadné.

Část kódu, kde se daný kousek opakuje, ohraničíme zepředu řádkem With ListView1.SelectedItems(0) a na konci řádkem End With. A všechny výskyty ListView1.SelectedItems(0) můžeme z obsahu tohoto bloku klidně vymazat. Pokud totiž něco uvnitř bloku začíná tečkou, je to automaticky přidruženo k vlastnosti nebo objektu za slovem With. Takto nemůžeme rozdělit prakticky jakýkoliv objekt a vlastnost, ale pouze na místě tečky. Nikde jinde. Procedura úpravy tedy bude po zjednodušení vypadat takto:

    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

Musíte uznat, že to je hned přehlednější. A navíc je to méně psaní. Pokud by bylo opakování na dvou místech, With blok se nevyplatí. Ale pokud je to prakticky na každém řádku, rozhodně doporučuji tento blok použít. Kódu je méně a lépe se v něm orientuje.

Odstranění záznamu

Poslední funkce, kterou musíme implementovat, je odstranění záznamu. To je však velmi jednoduché.

Celý tento a minulý díl slibuji, že vysvětlím, co jsou to kolekce. Tak tedy do toho. Kolekce má podobnou funkci jako pole. U pole je však obtížné měnit jeho velikost a ne vždy to je vůbec možné. Kolekce je "nafukovací" pole. Můžeme do ní metodou Add položky přidávat, vlastnost Count vrací počet položek a máme také metodu Remove, která položky odebírá. Kolekce se používají velice často (kolekce položek v seznamu, kolekce komponent na formuláři atd.).

Před odstraněním, stejně jako před úpravou, musíme zjistit, jestli uživatel má vybranou nějakou položku. Pokud by se tak stalo, nejen že bychom nevěděli, kterou položku máme odebrat, ale program by nám vyhodil chybu při práci s ListView1.SelectedItems(0), protože tato položka by neexistovala. Procedura tlačítka pro odstranění bude tedy vypadat takto:

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

        ListView1.Items.Remove(ListView1.SelectedItems(0))
    End Sub

To je vše. Aplikace je hotová. V příštím díle si povíme o procedurách a funkcích a ukážeme si, jak si je vytvářet.

Hotová aplikace pro domácí účetnictví

 

hodnocení článku

2 bodů / 4 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

18. Dědičnost 06.10.2008
17. Objektově orientované programování - základy 30.06.2008
16. Třídy a funkce .NET frameworku, o kterých je dobré vědět 31.12.2007
15. Práce se soubory, úvod do objektově orientovaného programování 19.11.2007
14. Vykreslujeme graf 31.08.2007
13. Úvod do grafiky 27.08.2007
12. Práce s textem a řetězci 17.08.2007
11. Kolekce a pole 27.07.2007
10. Funkce a procedury 01.06.2007
9. Přidáváme druhý formulář 18.05.2007
8. Pole, cykly a práce se soubory 14.05.2007
7. Pole 09.05.2007
6. Cyklus For 05.05.2007
5. Složitější podmínky a rozhodovací struktury 26.04.2007
4. Podmínky a operátory 26.04.2007
3. Proměnné a datové typy 25.04.2007
2. Začínáme programovat 25.04.2007
1. Úvod, vývojové prostředí a základní pojmy 25.04.2007

 

Mohlo by vás také zajímat

Windows Presentation Foundation (WPF) - díl 5.: Device independent pixels

Co je to DPI a proč by vás to mělo zajímat? Jak se aplikují automatické transformace při změně této hodnoty? Článek je prvním pohledem tohoto seriálu do transformací a pozičního systému WPF.

Práce s časovými pásmy a letním časem v aplikaci a databázi - díl 3.: DateTimeOffset v .NET Frameworku

DateTimeOffset je méně využívanou alternativou struktury DateTime v .NET Frameworku. Navíc dovoluje ukládat časové pásmo a pohodlně s ním pracovat.

Co je to .NET Framework 4.5?

V tomto článku se snažím nastínit rozdíl mezi .NET 4 a .NET 4.5 z pohledu zpětné kompatibility.

 

 

Nový příspěvek

 

Mr.

1'

csharp|

xml|

css|


'

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Budeme-li chtít nestavit programově šířku sloupce (například roztáhnout na hodnotu 100) v ListView

ListView1.Columns(ColumnHeader1.DisplayIndex).Width() = 100

ColumnHeader1 -> pouze pro první sloupec

ColumnHeader2 -> pouze pro druhý sloupec

.

.

.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Chybejici obrazky

Taky se primlouvam za vlozeni chybejichich obrazku, prave se podle techto kurzu ucim VB.NET a ted to asi dohromady nedam, kdyz se tu pise:

Přidejte na něj komponenty podle obrázku

...a zadny tu neni

diiiiky

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Obrázky v článku

Nedali by sa chýbajúce obrázky v článku aktualizovať? Určite tento seriál číta veľa ľudí aj po 7 rokoch. Ďakujem za skvelý kurz VB.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Problém s uložením podobné databáze

Dobrý den,

potřebuji poradit.

Zkusil jsem předělat tento program na něco podobného jako program pro cizince ale jako tuto databázi (tedy vše v dat. typu String) a na slovíčka nejen české a anglické, ale i německé.

Vše jsem zprovoznil, jen ukládání mi u tohoto datatového typu nefunguje.

Prosím, poraďte mi, jak mám upravit tento program ve FormClosing, aby se mi program uložil:

Dim soubor As New IO.StreamWriter("database.txt")
        For i As Integer = 0 To ListView1.Items.Count - 1
            soubor.WriteLine(ListView1.Items(i).SubItems(0).Text)
            soubor.WriteLine(ListView1.Items(i).SubItems(1).Text)
            soubor.WriteLine(ListView1.Items(i).SubItems(2).Text)
        Next
        soubor.Close()

Děkuji mnohokrát.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Co znamená nefunguje? Co to dělá nebo nedělá?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Přidané položky se po zavření neuloží.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Přidat tam jdou jen napsáním do database.txt

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

A když aplikaci spustíte, přidáte položky, uložíte, ukončíte aplikaci a podíváte se do toho souboru přes průzkumníka, tak to tam je?

Pokud ano, pak bude problém v tom, že když soubor database.txt ve Visual Studiu označíte v okně Solution Explorer, tak v okně Properties najdete Copy To Output Directory = Copy Always.

To vezme soubor database.txt z projektu a při kompilaci ho překopíruje do cílového adresáře (a přepíše ty změny, které jste v něm udělal dříve).

Změňte to na Copy If Newer a bude to.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Už to funguje, děkuji mnohokrát.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Chtěl jsem si na druhý formulář do názvu zadat v případě, že přidávám záznam, tak "Přidání záznamu" a pokud Edituju, tak "Oprava záznamu". Místo "dialog1". Jen tak z pilnosti. Ale nějak se se mnou nechce bavit. Poradíte? Díky.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Možná je nějaké elegantní řešení.Mě napadá jen vytvořit si tři dialogy a každý si pojmenovat podle sebe, a pak ho použít pro daný úkon

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

To si nemyslím. Když má dialog1 vlastnost "Text", tak se dá určitě změnit. Otázka je, jak. Kod by mel být asi zapsán v události click.button1.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Stačí zapsat do události tlačítek těsně za vytvoření nové instance dialogu1

dlg.Text = "Upravit"

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den, chi se zeptat jestli se datum v listview zobrazuje vždy jako první?

 Dim soubor As New IO.StreamReader("database.txt")       'otevřít soubor
        While Not soubor.EndOfStream                            'číst, dokud nejsme na konci souboru
            Dim cznazev As String = soubor.ReadLine()           'načíst první řádek - český název
            Dim lanazev As String = soubor.ReadLine()           'načíst druhý řádek - latinský název
            Dim czceled As String = soubor.ReadLine()           'načíst třetí řádek - česky čeleď
            Dim datum As DateTime = CDate(soubor.ReadLine())    'načíst čtvrtý řádek - datum
            Dim poznamka As String = soubor.ReadLine()          'načíst pátý řádek - poznámku
            Dim laceled As String = soubor.ReadLine()           'načíst šestý řádek - latinsky čeleď 
            Dim nalez As String = soubor.ReadLine()             'načíst sedmý řádek - naleziště
            Dim vyska As String = soubor.ReadLine()             'načíst osmý řádek - nadmořská výška
            Dim stanoviste As String = soubor.ReadLine()        'načíst devátý řádek - stanoviste
            Dim sberac As String = soubor.ReadLine()            'načíst desátý řádek - sbíral
            Dim urcovac As String = soubor.ReadLine()           'načíst jedenáctý řádek - určil


            'přidat položku do seznamu
            Dim polozka As New ListViewItem()                   'vytvořit novou položku seznamu
            polozka.SubItems.Add(cznazev)                       'přidat první sloupeček s českým názvem
            polozka.SubItems.Add(lanazev)                       'přidat druhý sloupeček s latinským názvem
            polozka.SubItems.Add(czceled)                       'přidat třetí sloupeček s českou čeledí
            polozka.SubItems.Add(datum)                         'vypsat datum
            polozka.SubItems.Add(poznamka)                      'přidat pátý sloupeček s poznámkou
            polozka.SubItems.Add(laceled)                       'přidat šestý sloupeček s latinskou čeledí
            polozka.SubItems.Add(nalez)                         'přidat sedmý sloupeček s nalezištěm
            polozka.SubItems.Add(vyska)                         'přidat osmý sloupeček s výškou
            polozka.SubItems.Add(stanoviste)                    'přidat devátý sloupeček s stanovištěm
            polozka.SubItems.Add(sberac)                        'přidat desátý sloupeček s sběračem
            polozka.SubItems.Add(urcovac)                       'přidat jedenáctý sloupeček s určujícím


            ListView1.Items.Add(polozka)                        'přidat položku do seznamu
        End While

v databázi (database.txt) je datum až čtvrtý a zobrazí se do 1. sloupce listview.

Je to tak automaticky, dá se to změnit?

Díky moc

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Jak udělám filtr v listview? Prosím pomoc.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

PŘEKOPÍROVAL jsem vše z tohoto webu do VB.

Náhle se mi stává že když vše v dialogu vyplním tak že se mi z ůdajů v list form oběvují pouze datum a to né ani celé.

Public Class Form1

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

    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dlg As New Dialog1()                                'vytvořit objekt nového okna
        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

            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.ToShortDateString()   '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 If
    End Sub

    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

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

        ListView1.Items.Remove(ListView1.SelectedItems(0))
    End Sub
End Class

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den. Pokoušel jsem se přijít na to, jak smazat více položek, když je označím. Napsal jsem na to cyklus, ale pořád se mi nedaří přijít na to, kde mám chybu. Prosím o pomoc.


For i As Integer = 0 To ListView1.SelectedItems.Count - 1  'opakovat cyklus dokud se "i" nerovná "počtu označených položek - 1"
            ListView1.Items.Remove(ListView1.SelectedItems(i))     'smazat položku
Next

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Dobrý den.

Více položek se dá smazat takto:

For i As Integer =  ListView1.SelectedItems.Count - 1 To 0 Step -1  
            ListView1.Items.Remove(ListView1.SelectedItems(i))     
Next

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den, mohl by sem někdo přidat příspěvek, jak napsat kód, aby se po kliknutí na tlačítko zobrazil součet všech položek? Přemýšlel jsem nad tím, ale nic mě nenapadlo.

Děkuji

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Sčítanie položiek by malo byť jednoduché. Mal by to robiť trebárs tento kód (na formulár je pridané tlačítko Button4 ktoré spúšťa kód a TextBox1, kde sa suma vypíše):

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim suma As Double = 0
        For i = 0 To ListView1.Items.Count - 1
            suma = suma + CDbl(ListView1.Items(i).SubItems(1).Text)
        Next
        TextBox1.Text = CStr(suma)
    End Sub

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Ahoj.

chtěl bych přidat do aplikace tlačítko a textbox pro spočítání celkového zůstatku.Tz.spočítat hodnoty sloupce "Částka" z ListView.Jde to?

díky

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Dobrý den,

pokud se podíváte co se děje s položkama při zavření formuláře, tak tam bych viděl návod na řešení.

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        Dim soubor As New IO.StreamWriter("database.txt")
        For i As Integer = 0 To ListView1.Items.Count - 1
            soubor.WriteLine(ListView1.Items(i).SubItems(0).Text)
            soubor.WriteLine(ListView1.Items(i).SubItems(1).Text)
            soubor.WriteLine(ListView1.Items(i).SubItems(2).Text)
        Next
        soubor.Close()
    End Sub

vytvořil bych si proměnnou součet

použil bych forcyklus a v něm do proměnné součet sčítal všechny SubItems(1)

výsledek bych zobrazil ve Vašem textboxu.

Petr

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

tak to bych neřekl....měl by jste se pořádně podívat a promyslet si co píšete..:)

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Dobrý den,

Omlouvám se, jestli jsem nepochopil Vaší otázku, ale zdá se mi jasná. Stále si myslím, že by Vám to mohlo pomoci.

'btn_secti click
dim soucet as integer=0
        For i As Integer = 0 To ListView1.Items.Count - 1
        soucet=soucet+Cint(ListView1.Items(i).SubItems(0).Text)
        Next
        textBox.text=Cstr(soucet)
    End Sub

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Opsal jsem kód přesně podle ukázky, ale položky se po kliknutí na talčítko nesečtou.

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim soucet As Integer = 0
        For i As Integer = 0 To ListView1.Items.Count - 1
            soucet = soucet + CInt(ListView1.Items(i).SubItems(1).Text)
        Next
        TextBox1.Text = CInt(soucet)
    End Sub
End Class

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Zde jsem sestavoval podle návodu aplikaci přímý a výdaje. Snažil jsem se to pochopit, a poněvadž jsem se nadchnul tak jsem se pustil do kalkulačky a tisku a ejhle v tu chvíli jsem si uvědomil, že se mam ještě kopu věcí naučit :-)než se do něčeho takového pustím ale, poněvadž Mi to vrtalo hlavou a nedalo spát zde je výsledek hledání a zkoumání po internetu a v literatuře.

Imports System.Drawing.Printing
Public Class Form1

    Private Property StringToPrint As String

    Private Property btnPrint As Object


    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("date.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()
    End Sub

    Private Sub Button18_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button18.Click
        Button1.Text = "0"
        Label1.Text = ""
        Label2.Text = ""
        Label3.Text = ""
    End Sub

    Private Sub Button19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button19.Click
        End
    End Sub

    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click
        If Label1.Text > "" And Label2.Text = "+" Then
            Button1.Text = Val(Label1.Text) + Val(Button1.Text)
            Label3.Text = Button1.Text
        ElseIf Label2.Text > "" And Label2.Text = "-" Then
            Button1.Text = Val(Label1.Text) - Val(Button1.Text)
            Label3.Text = Button1.Text
        ElseIf Label2.Text > "" And Label2.Text = "*" Then
            Button1.Text = Val(Label1.Text) * Val(Button1.Text)
            Label3.Text = Button1.Text
        ElseIf Label2.Text > "" And Label2.Text = "/" Then
            Button1.Text = Val(Label1.Text) / Val(Button1.Text)
            Label3.Text = Button1.Text
        Else
        End If
    End Sub

    Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button17.Click
        Label2.Text = "+"
        Label1.Text = Button1.Text
    End Sub

    Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click
        Label2.Text = "-"
        Label1.Text = Button1.Text
    End Sub

    Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
        Label2.Text = "*"
        Label1.Text = Button1.Text
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Label2.Text = "/"
        Label1.Text = Button1.Text
    End Sub

    Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "0"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "0"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "0"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "0"
        Else
            Button1.Text = Button1.Text & "0"
        End If
    End Sub

    Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Button1.Text = "0" Then
            Button1.Text = ","
        ElseIf Button1.Text = Label1.Text Then
            Button1.Text = ","
        Else
            If Button1.Text.Contains(",") Then
            Else
                Button1.Text = Button1.Text & ","
            End If
        End If
    End Sub

    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "1"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "1"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "1"
        Else
            Button1.Text = Button1.Text & "1"
        End If
    End Sub

    Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "2"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "2"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "2"
        Else
            Button1.Text = Button1.Text & "2"
        End If
    End Sub

    Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "3"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "3"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "3"
        Else
            Button1.Text = Button1.Text & "3"
        End If
    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "4"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "4"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "4"
        Else
            Button1.Text = Button1.Text & "4"
        End If
    End Sub

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "5"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "5"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "5"
        Else
            Button1.Text = Button1.Text & "5"
        End If
    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "6"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "6"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "6"
        Else
            Button1.Text = Button1.Text & "6"
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "7"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "7"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "7"
        Else
            Button1.Text = Button1.Text & "7"
        End If
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "8"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "8"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "8"
        Else
            Button1.Text = Button1.Text & "8"
        End If
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If Button1.Text = Label1.Text Then
            Button1.Text = "9"
        ElseIf Button1.Text = "0" Then
            Button1.Text = "9"
        ElseIf Button1.Text = Label3.Text Then
            Button1.Text = "9"
        Else
            Button1.Text = Button1.Text & "9"
        End If
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Label4.Text = Date.Now().ToString("F")
    End Sub

    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("date.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()
    End Sub
    'Sub pro vytištění textu
    Private Sub PrintText(ByVal sender As Object, _
      ByVal ev As PrintPageEventArgs)
        ' Text v objektu Graphics vytvoří metodou DrawString
        ev.Graphics.DrawString(TextBox2.Text, New Font("Arial", _
          18, FontStyle.Bold), Brushes.Black, 100, 100)
        ' určí, že je do poslední stránka, která se má tisknout
        ev.HasMorePages = False

    End Sub


    Private Sub Button22_Click(ByVal sender As System.Object, ByVal ex As System.EventArgs) Handles Button22.Click
        ' Tisk pomocí zpracovatele chyby, aby se zachytily případné potíže
        Try
            ' Deklaruje proměnnou PrintDoc typu PrintDocument
            Dim PrintDoc As New PrintDocument()
            AddHandler PrintDoc.PrintPage, AddressOf Me.PrintText
            PrintDoc.Print()   'tisk  textu
        Catch e As Exception  ' zachytí výjimky související s tiskem
            MessageBox.Show("ERROR PRINT")
        End Try



    End Sub

   
    Private Sub Button15_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click
        Dim dlg As New Dialog1()                                'vytvořit objekt nového okna
        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

            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.ToShortDateString()   '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 If

    End Sub

    Private Sub Button20_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button20.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

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

        ListView1.Items.Remove(ListView1.SelectedItems(0))

    End Sub
End Class

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Zdarec, snažím se vytvořit vyhledávání v komponentě ListView.

Přidal jsem jedno tlačítko a TextBox.

Napsal jsem tohle, ale je-li tam slovo stejné slovo víckrát, tak to najde pouze první. Také musíte nastavit hodnotu HideSelection na False. Najdete ji v okně Properties u ListView.

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim instance As ListView
        Dim text As String
        Dim includeSubItemsInSearch As Boolean
        Dim startIndex As Integer
        Dim returnValue As ListViewItem
        text = TextBox1.Text
        instance = ListView1
        startIndex = 0
        includeSubItemsInSearch = True
        returnValue = instance.FindItemWithText(text, includeSubItemsInSearch, startIndex)
        If returnValue Is Nothing Then
            MsgBox("Nenalezeno", MsgBoxStyle.Critical)
        Else
            returnValue.Selected() = True

        End If

Pokud víte jak na to, poraďte mi plííís nebo z toho neusnu :-)

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

možná: "hledej další ..."

...

startindex=ListView1.SelectedItems(0).Index+1

...

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Mohl by mi nekdo prosim poradit?

V prvnim formulari provedu nejaky vypocet a kdyz zobrazim druhy formular, chtel bych aby se mi predchozi vysledek nacetl do tohoto folmulare jako startovaci hodnota.

Nevite nekdo jak na to?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Omlouvám se za příspěvek který je možná off topic - jsem úplný začátečník ve vb a prosím o jednu radu, pokud může někdo pomoci...

Jakým způsobem donutit dva formuláře k vzájemnému předávání proměnných? Mám formulář frmMain který otevře formulář frmLogin - na kterém jsou pole txtLogin a txtPassword do kterých je možno vepsat údaje.. po přihlášení bych potřeboval formuláři (frmMain) předat hodnoty txtLogin.Text do proměnné varLogin a stejně tak txtPassword.Text do varPassword - už se s tím trápím dva dny a nemohu přijít na to jak to udělat - byl by někdo tak hodný a poradil?

Omlouvám se, že otravuji :)

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

nebyl jsem přihlášený - omlouvám se - můj email je [email protected]

Dotaz na který "odpovídám" je můj..

Pro úplnost používám VB2008pro.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Nemohli byste mi prosím poradit příkaz abych mohl s položkama v ListView pohybovat nahoru a dolu?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Zdravím, měl bych jednu otázku, která zní: když mám vytvořený hlavní form a

> na něm je tláčítko ve kterém je kod, aby se utevřel dialog jako dim dlg as new

> dialog1

> if dlg.showdialog then

> end if

> Na dialogu mám tento formulář

> http://www.vbnet.cz/clanek--34-vb_net_od...

> A tak se vás ptám jak mám udělat aby se zápis pridaný listview ukazovalo na

> hlavním form místo label pro daný den záznam s listview.

> Děkuji za odpověď.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

jen takový dotaz neměla by si třeba ta aplikace po ukončení nebo někdy v průběhu taky ty data uložit do databáze? aspoň mislím že v článku nic o tm nebylo

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Zdravim mam problem a neviem kde je.. mam toto

Dim dlg As New Dialog1()

If dlg.ShowDialog() = DialogResult.OK Then

prikazy...

end if

no lenze ked sa mi zobrazi ten dialog a zmacknem OK tak nic proste len nato mackam ale nic sa nedeje nevykona sa nic...a ked zmenim dialogResult.OK na dialogResult.Cancel tak v pohode splni tu podmienku co je podtym ale musim zmacknut cancel... proste ten OK mi vobec nejde a ja uz nechapem kde moze byt chyba.. :(

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

píšete:Pokud by bylo opakování na dvou místech, With blok se nevyplatí. Ale pokud je to prakticky na každém řádku, rozhodně doporučuji tento blok použít. Kódu je méně a lépe se v něm orientuje.

předpokládám, že jako ve VB6,

je další základní výhodou, zrychlení vykonávání kódu.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den, můj dotaz je ohledně komponenty Listview. Rád bych se zeptal, jak docílit toho, že po kliknutí na jakýkoliv datový záznam v listview lze okamžitě záznam upravit. Našel jsem labelwrap=true, ale lze upravit jen záznam v prvním sloupečku. Rád bych upravil i pole např. ve čtvrtém sloupečku. Děkuji

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

oprava: labeledit=true ne labelwrap=true...Dotaz ale stále platí

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den. Nevím si rady s následujícím problémem. Pokud mám 2 formuláře (Form1 jako hlavní a např. Vstup jako formulář pro vstup dat), které mají oba globální proměnné (např pole), se kterými provádějí svoje výpočty. Pokud vyvolám formulář Vstup jako instanci a chci pracovat s aktuálním obsahem proměnné pole formuláře Form1, jak mám k ní přistupovat? Jde to způsobem MsgBox(Form1.pole(4)), ale když vytvořím instanci dlg a přistoupím k proměnné MsgBox(dlg.pole(4)), tak je hodnota nulová. Otázka tedy zní. Je přístup prvním způsobem k hodnotě formuláře Form1 správný?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den, mám problém s přidáním druhého formuláře. Mám Visual 2005 Professional Edition a když dám na projektu Add -> New Item, tak tam nemám ani DIALOG ani WINDOWS FORM, je tam pouze například Inherited Form...

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Zdravím, stáhněte si Microsoft Visual Basic 2008 Express Edition ze stránek Microsoftu. Je to volná verze zdarma.

Najdete na stránkách http://www.microsoft.com/express/downloa...

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den,

když přidám položku do seznamu a form1 pak zavřu, tak tuhle položku nemohu najít v database.txt.

Ale když VB2008 zavřu a znova otevřu, pak spustím aplikaci, tak ta přidaná položka tam stále je a v database.txt stále není. Kde je tahle položka uložena?

děkuji za odpověď.

Petr S.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Tak už vím. Vytvořil se jiný database.txt v jiném adresáři. Tam už jsou data ok.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den, chtěl bych se optat zda jde programově označit řádek v komponentě ListView. Jde mi o to aby při hledání a souhlasu textů se rádek, ve kterém je text označil selecteditems nesl patřičnou hodnotu.

Děkuji za radu, nějak se řešení ne a ne dopídit.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

nastavit hodnotu vlastnosti FullRowSelect na True

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Jak můžu vyhledat něco v komponentě ListView ?

nahlásit spamnahlásit spam 1 / 3 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den. Mohl bych poprosit o kompletní kod okna Form1?

Nějak se mi to nechce spustit, zvíraznuje jako problem radek s database.exe. [email protected]

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Zdravim, potrboval bych po kliknutí na Button otevřít nový formulář, respektive změnit strukturu stávající tak, abych nahrál jiný připravený formulář do stávajícího okna... Ale nevím jak a prosím o radu, dekuji velice...

nahlásit spamnahlásit spam 1 / 3 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Snažím se otevřít nový formulář funkcí show ale píše mi to chybu

Form that is already visible cannot be displayed as a modal dialog box. Set the form's visible property to false before calling Show. a nikde nemohu najít vlastnost visible.

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Show(Dialog1)
        Me.Close()
    End Sub

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Proč je v úpravě záznamu CInt a ne CDbl (myslim u částky samozřejmě)?

nahlásit spamnahlásit spam 2 / 4 odpovědětodpovědět

Chybička se vloudila. Opraveno.

nahlásit spamnahlásit spam 1 / 3 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobrý den,

lze nějak udělat, aby po vybrání jednoho z řádků v listview byl zvýrazněn celý řádek a né jen záznam v prvním sloupečku?

Díky za odpověď

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Ovšem, stačí nastavit hodnotu vlastnosti FullRowSelect na True.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Moc děkuji,

vy jste skvělý, já jsem slepá.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Na konci tohoto dílu jste napsal, že v příštím díle bude téma procedury a funkce a jejich vytváření.

Tak už byste mohl nějáký ten článek o tomhle napsat.

Děkuji.

nahlásit spamnahlásit spam -1 / 3 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Pulka udkazu na www.vbnet.cz

nefunguje !! chtelo by to s tim neco delat

nahlásit spamnahlásit spam -1 / 3 odpovědětodpovědět

Můžete to, prosím, specifikovat?

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Odkazy fungují, nenarazil jsem na žádný nefunkční, ale mnoho jich je bez obsahu. Bylo by dobré, aby nabídka obsahovala počet položek, na které odkazuje. Když tam bude nula, nikdo se nebude namáhat s otevíráním, aby se dověděl, že "Žádné články nejsou k dispozici."

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Dobře napsaná práce i pro laiky.Jaká je nejvhodnější a v tomto stylu napsaná dostupná literatura ?

nahlásit spamnahlásit spam -3 / 3 odpovědětodpovědět

O jazyce Visual Basic .NET a zejména o novější verzi 2005 toho v češtině existuje pramálo. Podívejte se například na nakladatelství Computer Press (www.cpress.cz), tam něco určitě najdete.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Diskuse: Přidáváme druhý formulář

Jen tak dál.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback