VB .NET - listboxy   zodpovězená otázka

VB.NET, Algoritmy, I/O operace

Dobry den, potrebuji ve VB vytvorit dva listboxy, kde jeden bude zobrazovat seznam adresaru a druhy zobrazi seznam souboru obsazenych ve vybranem adresari prvniho listboxu. Moc me to trapi...za kazdou radu predem dekuji!

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

Jednoduše:

(píšu z hlavy, tak omluvte chyby)

Dim Files As New List(Of String)
Dim Folders As New List(Of String)
Files.AddRange(My.Computer.FileSystem.Files("C:/"))
Folders.AddRange(My.Computer.FileSystem.Directories("C:/"))
Listbox1.Items.Clear() : Listbox2.Items.Clear()
ListBox1.Items.AddRange(Files)
ListBox2.Items.AddRange(Folders)

v případě potíží ještě napište.

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

...rád bych také jednou takhle psal z hlavy, ale jako naprostemu zacatecnikovi to bude jeste dlouho trvat...zdali vubec nekdy:)

Kod jsem vlozil, ale error list mi zobrazil 4 chyby, kterym moc nerozumim...nevim take zda jsem kod vlozil na spravne misto ve formulari(mozna take dotaz).

Podtrzene jsem mel argumenty (My.Computer.FileSystem.Directories ("C:/")) s chybovym hlasenim: File is not a member....

a dale posledni dva radky s hlasenim: Overload resolution failed because no accessible 'AddRange' can be called with these arguments:...

Diky ze ztracite cas s temito, pro Vas asi trivialnimi, dotazy!!!

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

Kód vložte do procedury při listboxX.SelectedIndexChanded.

Dále k těm chybám: jelikož jsem psal z hlavy asi jsem spletl názvy funkcí Files a Direcotries, zkuste projíždět členy My.Computer.FileSystem a intuitivně doplňte správná jména (nemělo by to být nic těžkého, pokud ovládáte angličtinu alespon na minimální úrovni)). Dále k AddRange. Asi je potřeba více argumentů (doporučuji vbnet seriál pro začátečníky) tzn.: AddRange(My.Com..., a další potřebné argumenty, které bude visual studio chtít.).

Čas, který Vám věnuji pro mě není ztraceným, a vaše dotazy pro mě NEJSOU triviálními, mimo jiné i proto, že jsem před půl rokem sotva věděl co je to procedura. Nejsem profesionál, ba naopak. Jsem začátečník.

Pokud se mi však chcete odvděčit, změňte si v profilu první písmena Vašeho jména na velkáa pište diakritiku. Děkuji Vám

PS.: V případě potíží se na mě klidně znovu obraťte, jen co se dostanu k Visual Studio tak Vám vypracuji celý kód.

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

Zkuste drobnou úpravu:

Dim Files As New List(Of String)
        Dim Folders As New List(Of String)

        Files.AddRange(My.Computer.FileSystem.GetFiles("C:/"))
        Folders.AddRange(My.Computer.FileSystem.GetDirectories("C:/"))
        ListBox1.Items.Clear() : ListBox2.Items.Clear()
        ListBox1.Items.AddRange(Files.ToArray)
        ListBox2.Items.AddRange(Folders.ToArray)

, nebo také

Dim Files As String()
        Dim Folders As String()

        Files = IO.Directory.GetFiles("C:/")
        Folders = IO.Directory.GetDirectories("C:/")
        ListBox1.Items.Clear() : ListBox2.Items.Clear()
        ListBox1.Items.AddRange(Files)
        ListBox2.Items.AddRange(Folders)

. V obou případech kód umístěte do události, která by Vám měla spustit naplnění listboxů (pod tlačítko, při výběru nového adresáře atd.), nebo ho (pro tyto testovací účely) umístěte přímo do

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

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

Pánové, všem vám moc děkuji.

Už mám dva listboxy, které zobrazují jak adresáře tak soubory. Jen stále se mi nedaří vyřešit ten původní problém a to ten, že pokud v seznamu adresářů vyberu(kliknutím myši nebo kurzorovou šipkou) daný adresář, tak se mi ihned ve druhém seznamu zobrazí obsah souborů toho vybraného adresáře.

Ono to nebude asi tak jednoduché. Na netu jsem našel postupy, které to řeší ve VB6, ale mé programatorské pidischopnosti mi to neumožnují přepsat do .NETu:(

Odkaz:

http://www.planet-source-code.com/vb/scr...

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

Zas až tak složité by to být nemělo. (kdybychom jenom to předešlé doplnili). Ale určitě nebudete chtít v obou listboxech vypisovat jak u adresářů, tak i u souborů celé cesty (ale jenom názvy souborů resp. adresářů), a taky asi budete chtít, aby se aktualizoval i obsah adresářů. No a nakonec se ještě musí umožnit uživateli, aby byl schopen vrátit se do nadřazeného adresáře. Pokud to všechno dáte dohromady, mohlo by to vypadat třeba takhle (jak vypisovat jen názvy už tady bylo řešeno v diskusi nedávno-tam jsem ten kód využil):

Public Class Form1



    Public Structure Soubor
        Dim _Nazev As String
        Public Property Nazev() As String
            Get
                Return _Nazev
            End Get
            Set(ByVal value As String)
                _Nazev = value
            End Set
        End Property

        Dim CelaCesta As String
    End Structure



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        naplnList("c:\")
        ListBox1.DisplayMember = "Nazev"
        ListBox2.DisplayMember = "Nazev"


    End Sub

    Private Sub naplnList(ByVal cesta As String)
        ListBox1.Items.Clear()
        ListBox2.Items.Clear()

        If cesta <> IO.Directory.GetDirectoryRoot(cesta) Then
            Dim nahoru As New Soubor
            nahoru.Nazev = "[..]"
            nahoru.CelaCesta = IO.Directory.GetParent(cesta).FullName
            ListBox1.Items.Add(nahoru)
        End If

        For Each file As String In IO.Directory.GetDirectories(cesta)
            Dim f As New Soubor
            f.Nazev = IO.Path.GetFileName(file)
            f.CelaCesta = file
            ListBox1.Items.Add(f)
        Next

        For Each file As String In IO.Directory.GetFiles(cesta)
            Dim f As New Soubor
            f.Nazev = IO.Path.GetFileName(file)
            f.CelaCesta = file
            ListBox2.Items.Add(f)
        Next


        
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        If ListBox1.SelectedItem IsNot Nothing Then                     'pokud je něco vybráno
            Dim f As Soubor = CType(ListBox1.SelectedItem, Soubor)      'přetypovat položku
            naplnList(f.CelaCesta)                                      'zobrazit do labelu hodnotu vybrané položky
        End If

    End Sub
End Class

Není to okomentované (z důvodu úspory času vzhledem k pokročilé hodině), ale asi by to mělo být jasné (najděte si v diskusi zpátky tu část o vyplňování listboxu pouze názvem souboru - tam to je dobře vysvětleno, pokud by jinak ještě něco nebylo jasné, napište.

(samozřejmě pro plnohodnotnou aplikaci chybí ošetření chyb - třeba když vyberete adresář, ve kterém nemáte právo prohlížení, atd...)

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

Dobré cvičení, ale praktický smysl jsem nepochopil. Proč nepoužít dialog?

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

Zkuste být, prosím, trochu konkrétnější - jaký dialog máte pro tento účel na mysli (rád se nechám poučit bych si rozšířil svůj obzor, neboť jsem také pouhopouhý začátečník).

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

Jak jsem napsal, nepochopil jsem cíl. Vyznělo to asi jinak, než myslím, měl jsem napsat neznám cíl. A dialog právě podle účelu - folder, open nebo save.

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

Tak to jo, taky neznám účel, k čemu to autor potřebuje - z jeho popisu jsem to ale pochopil jako snahu o vytvoření něčeho ala průzkumník apod. k čemuž se mně známé dialogy zrovna moc nehodí. (tam směřoval i můj dotaz, jestli snad neznáte ještě nějaký spešl dialog právě pro řešení této problematiky).

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

Připadlo mi to skoro jako školní úloha - ukažte, co umíte a pak to někam zapadne. Do "Průzkumníka" to má ještě moc daleko. Ale když jsem si znova přečetl úvodní otázku, myslím, že autor by rád, aby se ukazovaly v druhém boxu obsahy souborů, tedy ještě další pořádné sousto.

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

Nemyslím, že autorovi šlo o obsah souboru, ale o soubory ve složce.

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

Vyšel jsem z tohoto: "tak se mi ihned ve druhém seznamu zobrazí obsah souborů toho vybraného adresáře"

Splést nebo přehlédnou se může každý, včetně vás. Tak to napomínání si podruhé odpusťte!

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

Ta odpověď patřilo k tomuto textu:

"Myslím, že by jste se měl cvičit ve čtení. Autor jasně napsal, že chce klikem na složku vypsat soubory. Nemyslím, že je k tomu cokoliv možno dodat a už vůbec ne sem cpát dialogy.

A to, že to má do průzkumníka aleko je sice pravda, ale autor je teprve začáteční (stejně jako já) a tedy zřejmě neočekává, že naprogramuje něco, co bude Průzkumníkovi moci čelit, nemyslíte? "

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

Ale vážení přátelé, z některých příspěvků cítím dost podrážděné reakce a zbytečně nepřátelský tón. Doposud se diskuse v tomto fóru nesly v duchu snahy pomoci (nám) začínajícím - každý jsme na určité úrovni a proč bychom nepomohli, můžeme-li, i těm ještě nezkušenějším. A z vlastní zkušenosti moc dobře vím, že pomocí může být i pouhé nasměrování. Proto jsem se také třeba tázal jednoho z pisatelů, jaký "dialog" měl na mysli pro tento případ - aniž jsem měl v úmyslu jakkoliv hanět jeho názor. Stejně tak ostatní reakce nechápu jako snahu o nějaké "napomínání" někoho, proto jsem dost dobře nepochopil tu trochu podrážděnejší repliku

na toto téma, a ani ten příměr se "školní úlohou".

Netvrdím, nikdy jsem to netvrdil a ani si to dokonce nemyslím, že řešení, které jsem tazateli jako jedno z možných předestřel je to zcela nejlepší. Ale je funkční a plní to, co tazatel požadoval. A je na něm, aby si to zoptimalizoval - nepředložil jsem to jako hotové řešení, ale jako námět kudy je možno se ubírat.

A nikdo soudný snad ani nemůže předpokládat, že by toto řešení mělo být jakous náhražkou průzkumníka - to nikdy nikdo netvrdil a dost mne překvapilo, že by to tak někdo mohl pochopit. Ta má poznámka o průzkumníkovi byla pouze poukazem na "typ programu", když si jeden z pisatelů nedokázal představit reálné využití takovéto programové konstrukce.

A krom toho, budete-li programovat svého "průzkumníka" myslím, že touto konstrukcí (samozřejmě jistě mnohem dokonaleji zpracovanou) začnete a pak na ni budete už jen nabalovat další funkčnost - proto nechápu, v čem je spatřována nesmyslnost dotazu tazatele či systém práce "ukažte co umíte a pak to někam zapadne". Já naopak takovýto postup považuji zvláště u začátečníka za zcela logický a správný.

P.S. Jenom tak na okraj - nikoho nenapadám a ani nechci poučovat, není to totiž účelem diskusních skupin a krom toho to není ani technicky možné, protože je těžko reagovat na někoho anonymně vystupujícího, protože těch "bezejmenných" je zde evidentně více a já nejsem schopen separovat jednotlivé názory jednotlivých pisatelů.

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

Myslím, že můj příspěvek, který jsem opravil a který visí dole pod Vaším přispěvkem se určitým způsobem dotkl i Vás. A jelikož si Vás , i dotyčného, kterého jsem urazil, vážím jako schopnějšího, lepšího a chytřejšího programátora a člověka, také Vás prosím o prominutí.

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

Velký díík Viktoru Langerovi, kterého rozhodně napovažuji za začátečníka!!!

To, že můj dotaz způsobí takovou vlnu emocí, jsem vůbec nečekal. Nevím proč, ale některé příspěvky, které jsem do diskusního fóra vložil se nezobrazují??? Každopádně bych rád ještě jednou upřesnil svůj cíl: pokouším si vytvořit program simulujicí jukebox. Základem by měly být dva ListBoxy: první zobrazí seznam názvů alb(adresáře) a druhý zobrazí seznam skladeb vybraného adresáře...proto kluci šetřte nervy, přijdou další dotazy.

Ještě jednou dííík Viktorovi Langerovi, který si získal přízeň i mé manželky po přečtení téhle bouřlivé diskuse!

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

Jak jsem již napsal, díků netřeba - sám využívám předložených námětů k tomu, abych se na nich něčemu přiučil.

Jinak zasílám pozdravy i Vaší drahé polovičce, toliko nerozumím, čím jsem si její přízně vysloužil a nejsem si zcela jist, zdali jsem jí hoden. Přesto jsem hrd za toto morální ocenění a děkuji za ně.

P.S. také pozoruji nějaké podivnosti se zobrazováním nebo nezobrazováním některých příspěvků v této diskusi???

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

Velice se Vám omlouvám, v době kdy jsem příspěvek psal jsem byl z určitého důvodu podrážděný a přiznávám, že ode mne bylo špatné, že jsem si vztek vybil na Vás.

Text jsem poté opravil, uvědomil jsem si totiž své chování.

Teď toho upřímně lituji a prosím Vás, přijměte mou omluvu. Nemám nic proti Vám, ani proti Vaším příspěvkům. Jen mi ujeli nervy a já nechal emoce aby mě ovládali. Prosím Vás tedy: přijměte mou omluvu.

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

Přijímám, již se stalo, také jsem trochu vyletěl. Již ze samotného smazání textu jsem pochopil, jak věc vidíte a v tu chvíli vzal jako omluvu. Kdybych se podíval o minutu později byl text pryč, a nic jsem nepsal - škoda toho.

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

Vážení kolegové, mám z Vás radost, že se dokážeme nakonec takto pěkně omluvit a vyjasnit si celou záležitost.

Ano, asi mezi Vámi nejsem zcela "začátečník", ale, bohužel, pouze věkem svým, proto jsem si taky dovolil Vám tak trošičku promluvit do duše. Co se týká programování jsem ale skutečným zelenáčem co má ještě mlíko na bradě a mnohý z Vás by mne strčil do kapsy (mám-li říct celou pravdu, k programování jsem se po mnoha a mnoha letech vrátil pouze z důvodu, že si potřebuji něco konkrétního "spíchnout" a Web pánů Hercega a Jecha mne zaujal natolik, že by mi bylo líto, kdybychom společně znehodnotili zdejší diskusi vzájemnými výpady a napadáním, proto jsem si také dovolil do této "neodborné" debaty vstoupit).

Jinak jsem rád pokud někomu mé rady jsou ku pomoci, ale podceňování sebe sama zde není zcela na místě - třeba přiznám, že sám bych "z hlavy" nesplodil ani polovinu z toho, co předvedl kolega Hübelbauer, a to je ve věku mých mladších potomků.

Pokud se mně osobně podaří něco splodit, jest to dílem pouze toho, že nejsu líný hledat v nápovědě či objectbrowseru, dost intenzivně využívám vymožeností intellisense a zkouším a zkouším...

A hlavním důvodem veškerého tohoto mého konání je skutečnost, že se tak sám učím a poznávám nové věci. A to by byla, si myslím, ode mne ta nejdůležitější rada pro nás všechny nováčky.

Jinak jestli náhodou některá z omluv patřila i mně pak vězte, že já se necítil ničím napaden a tudíž netřeba se omlouvati. Vše OK.

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

Trochu jsem tady zadělal na nedorozumění a teď se ještě ztrácejí usmiřovací odpovědi. Nejsem uražený, ale fórum opouštím.

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

Tak snad abych vše uvedl na pravou míru:)

Vytvořit program, který by konkuroval průzkumníkovi rozhodně nehodlám, spíš jde o program, který by simuloval jukebox. V uvodnim formuláři by měli být dva ListBoxy...jeden bude obsahovat alba(Listbox1-adresáře) a druhý seznam pisniček vybraného alba(adresáře z ListBoxu1), čili mp3ky. Dále by v každé složce byl vedle mp3ek také obrazek alba, který by se načítal do nějakého PictureBoxu. Statistika, čas do konce přehrávané skladby, atd.

Možná by šlo použít jiné prvky...nevím?? Jak říkám, jsem fakt začátečník. Za rady děkuji...hned to jdu vyzkoušet!!!

Jinac klukům velký díkanec za www.vbnet.cz Pěkně to děláte jen tak dál.

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

Pokud (jako že asi ano) budete chtít ty mp3 přehrávat, pomůže import reference Microsoft.DirectPlay.

V projectu klikněte pravým na Project a zvolte References - Add Reference a hledejte: Microsoft.DirectX.DirectPlay. Pak si vytvoříte v k)odu instanci atd.

S kódem by Vám snad mohl pomoci pan Langer, protože já u sebe stále nemám VS. Tímto ho prosím aby Vás nasměroval.

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

...kuci, tak se už nehádejte...vím že ruce si podat asi nemůžete, ale uzavřít příměří na dálku určitě jde:)

Nervy si šetřete pač trapnější dotazy teprve přijdou:)

...velký dik Viktoru Langerovi!

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

Tak to vypadá, že by se již hodil chat.

Jestli jsem pátral po smyslu řešení, tak jsem nemyslel na to, že byste chtěl dělat průzkumníka. Nyní je to jasné, dík za vysvětlení.

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

ale ve snaze odhalit chybu - mizí příspěvky, nové se nevkládají - souhlasím s vymazáním všech pokusů, pokud se někde zapsaly...

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

K tomu zobrazování a nezobrazování příspěvků:

nejste sám kdo tento jev pozoruje, pro mě už od předchozích 7 příspěvků tato diskuse běží pouze formou mailu. Chce to informovat p. Hercega. Udělám to.

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

Dobry den jak se to da udelat ze oskenuje disky a da je do comboboxu ?

Napadla me takova vec :

 For Each curDrive In My.Computer.FileSystem.Drives
            DriveSelect.Items.Add(curDrive)
            If DriveSelect.Text = "" Then
                DriveSelect.Text = (drive)
            End If
            '
        Next

Private Sub DriveSelect_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DriveSelect.SelectedIndexChanged
        drive = DriveSelect.Text

        If DriveSelect.SelectedItem Then
            naplnList(drive)
        End If


    End Sub

Ale je v tom problem.Nefunguje to jak ma.Po nekolikate zmene Drive se list z adresarema ztrati nevite nekdo jak to opravit nebo lepsi reseni. Dik

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

Dobrý den, díky Vašemu příspěvku jsem konečně vyřešil svůj problém s výpisem disků pro program ve stylu Total Commander, funguje mi to bez chyb. Nadeklaroval jste curDrive jako typ Object? Také je podle mého názoru možné, že chyba je v tomto kusu programu:

 If DriveSelect.Text = "" Then
                DriveSelect.Text = (drive)

nikde předtím nevidím dosazení nějaké hodnoty do proměnné drive.

Ovšem určitě je špatně

 If DriveSelect.SelectedItem Then
            naplnList(drive)

vlastnost selecteditem není s ničím porovnávána.

PS: Jsem začátečník, jestli říkám něco blbě, opravte mě prosím.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • 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