Nepřístupný button   zodpovězená otázka

VB.NET

Zdravím,v první řadě upozorním na to ,že jsem začátečník.

Pracuji na otevírání různých souborů ze složky (ne z databáze) a potřeboval bych , aby když zadám do textboxu hledaný řetězec tak to vyhodnotí přítomnost souboru ve složce a znepřístupní dané buttony pro otevření. např :

ve složce budou přítomné soubory 1a , 1b .

tlačítka pro otevření mám 1a,1b a 1c .

program zjistí, že ve složce není soubor 1c a znepřístupní tlacítko 1c.

Prosím o pomoc , už se s tím trápím strašně dlouho. Děkuji

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

Zdravím,

z dotazu jsem nepochopil co vám vlastně nefunguje. Vyhledávání v adresáři, nebo to zapínání tlačítek?

Je to ve WPF, WinForm nebo web?

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

Omlouvam se za nedostatecne info , je to winform applikace a nejde mi to zapinani tlacitek.

Dekuji

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

Celý požadavek je trošku divný, ale budiž :-)

Tento kód po kliku na button1 deaktivuje button2. Místo metody GetDirs() dejte to co vám vrací obsah adresářů, button1_click odpovídá něčemu co tam určitě máte a to zahájení vyhledávaní v adresáři.

Snad nevadí, že je to v C#, kódu je minimum.

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            button1.Tag = "cd1";
            button2.Tag = "xxxxxxx";
            button3.Tag = "cd3";
        }

        private string[] GetDirs()
        {
            return new string[] {"cd1", "cd2", "cd3"};
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            string[] dirs = GetDirs();
            button1.Enabled = dirs.Any(d => button1.Tag.Equals(d));
            button2.Enabled = dirs.Any(d => button2.Tag.Equals(d));
            button3.Enabled = dirs.Any(d => button3.Tag.Equals(d));
        }
    }

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

je třeba projít tu složku a kontrolovat soubory

For Each fileName In System.IO.Directory.GetFiles(slozka)
'zde bude kód pro ověření existence souboru, resp. pro porovnání názvů
        Next

K čemu to má složit? Třeba by se to dalo vymyslet lépe...

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

Ak som Vás dobre pochopil tak hľadáte asi toto :


button1.enabled=false

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

Sorry, nejako sa mi to seklo, nevidel som predchádzajúce odpovede

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

Mockrat dekuji za rady, vyzkousim behem par dni ,atz bude chvile casu.

Aplikace ma za ucel otevirani drive pridanych souboru touto aplikaci; je vytvorena slozka do slozky jsou ulozeny dokumenty a obr , slozka je pijmenovana identifikatorem podle druhu ktery se interne u nas pouziva , jelikoz vsechny slozky neobsahuji treba obrazky tak bych potreboval ,aby bylo videt na prvni pohled ze tam ten a ten soubor neni, coz si myslim ze je toto dobre reseni ,buton nepujde stisknout pokud ta slozka neobsahuje soubor ktery buton otevira.

Priklad: Do slozky se da ulozit dokument "1a" dokument "1b" a obrazek "1obr" pricemz "1" je identifikator a je tak pojmenovana slozka v ktere jsou soubory ulozeny, protote neni podminkou ze jou ulozeny vsechny vsechny tri soubory potrebuji prave tuto funkci. Kdy mam combobox kam se tadava identifikator , v tomto pripade "1" a button "a" ktery po kliknuti otevre slozku podle identifikatoru ("1") a vyhleda identifikator ("1") +"a" , takto mam button "b" a button "obr". Moje planovane reseni bylo , ze kdyz se zmeni combobox tak aplikace vyhodnoti , ze zapne moznost stlaceni button podle toho jake soubory obsahuje.

Snad jsem to vysvetlil srozumitelne , pokud by pomohl nejaky kod z app , tak pridam, byl bych vam vsem moc vdecny za jakykoliv napad nebo podrobnejsi kod , jsem z toho nejak vedle , je to moje prvni applikace a dostal jsem se ,rekl bych celkem daleko, aplikace funguje a mam to ted osetreny msgboxem ,ale je to zbytecny klikani a moc se mi to nelibi.

Omlouvam se za diakritiku a pripadne chyby , pisu to na tychlo z mobilu....

Moc dekuji za pomoc.

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

Nebylo by třeba lepší zobrazovat ty soubory např v listboxu a mít jen jedno tlačítko, kterým by se vybraný soubor otevřel?

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

Tak to je dobby napad , zkusim to zrealizovat, kdybych se nekde zasekl napusu o pomoc , ale stejne by me zajimalo to reseni , ktere jsem zamyslel puvodne, kazdopadne toto reseni bude jednodusi a vykona to same...

Dekuji za napad

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

Kdysi jsem to ve VB.NET dělal takto

For Each fileName In System.IO.Directory.GetFiles(slozka)
    ListBox1.Items.Add(New System.IO.FileInfo(fileName).Name)
Next

a pak už jen dáte událost na tlačítko...

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

Použil jsem navrhované řešení vše v pohodě funguje , ale přeci jen mám dotaz jestli jde nějak otevírat soubory poklikáním přímo v listboxu na daný soubor.

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

Ještě jednou se vrátím k původní variantě , kterou jsem částečně rozchodil , ale button mi to zpřístupní pouze u jedné položky i když dotazované soubory tam jsou všechny, mám chybu v tom ,že se provede první a na druhou už nepokračuje , prosím o pomoc.

Kód:

 Private Sub c_odl_SelectedIndexChanged(sender As Object, e As EventArgs) Handles c_odl.SelectedIndexChanged
        Dim c As Object
        c = c_odl.Text
        Console.WriteLine(If(File.Exists(c + ("\") + c + ("obr.jpg")), "File exists.", "File does not exist."))
        o_obr.Enabled = True
        Console.WriteLine(If(File.Exists(c + ("\") + c + ("odl.pdf")), "File exists.", "File does not exist."))
        o_obr.Enabled = True
        Console.WriteLine(If(File.Exists(c + ("\") + c + ("opr.pdf")), "File exists.", "File does not exist."))
        o_obr.Enabled = True

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

Poklikáním v listboxu to jde myslím událostí "Double_Click"

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

Omlouvám se , že tu spamuju , už jsem dal do kupy variantu s dvěma listbox, děkuji za pomoc.

Ale stále koketuji s první variantou , už jsem to tak nějak rozchodil , ale mám pořád problém , ošáhnu si jestli soubor existuje a zpřístupní button , to funguje až na to , že mi to vykoná pouze u první funkce a další dva soubory už to neošáhne , asi to bude banalita , nevím vůbec proč, zde kód:

Private Sub c_odl_textchanged(ByVal sender As Object, e As EventArgs) Handles c_odl.TextChanged
        Button1.Enabled = False
        button2.Enabled = False
        button3.Enabled = False


        Dim c As Object
        c = c_odl.Text
        If File.Exists(c + ("\") + c + ("opr.pdf")) Then
            button1.Enabled = True
        End If
        If File.Exists(c + ("\") + c + ("obr.jpg")) Then
            button2.Enabled = True
        End If
        If File.Exists(c + ("\") + c + ("odl.pdf")) Then
            button3.Enabled = True
        End If

    End Sub

Prosím Vás ještě o pomoc

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

Zdravím,

mám pro Vás několik připomínek:

1. nepoužívejte zbytečně proměnné typu Object, pokud víte, že hodnota bude vždy textová, je ideální použít typ String

2. textové řetězce nespojujte operátorem + ale používejte &

3. souborové cesty nespojujte ručně, ale pomocí funkce IO.Path.Combine

Výsledný kód by pak vypadal asi takhle:

    Private Sub c_odl_textchanged(ByVal sender As Object, e As EventArgs) Handles c_odl.TextChanged
        Dim cesta As String = c_odl.Text
        Button1.Enabled = IO.File.Exists(IO.Path.Combine(cesta, "opr.pdf"))
        Button2.Enabled = IO.File.Exists(IO.Path.Combine(cesta, "obr.pdf"))
        Button3.Enabled = IO.File.Exists(IO.Path.Combine(cesta, "odl.pdf"))
    End Sub
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jen obecně:

if FileExists(TextBoxCi.Text) Then ButtonC1.Enabled = true else ButtonC1.Enabled = false

Měl jsi sem dát vzorek kódu ....

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