Využij akce až 80 % zdarma při nákupu e-learningu. Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu
python week

Diskuze: Obnovení tlačítek, pokud už bude dostupné aspon jedno COM zařízení

Aktivity
Avatar
Daniel Semerák:11. dubna 7:11

Zdravím.
Obracím se na vás s další prosbou.
Mám naprogramované, že když nemám dostupný žádný Serial Port, tak mi vypne tlačítka.
Vytvořil jsem si tlačítko, které zkouší, zdali se mezitím neobjevilo nějaké COM zařízení.
To mi funguje, problém ale nastává ve chvíli, že se mi "nezapnou" i do té doby zapnutá tlačítka, když už mám v CmbBoxu aspon jeden COM port. :-(

Zkusil jsem:

private void BtnObnovitSeznamPortu_Click(object sender, EventArgs e)
        {
            string[] _VsechnyPorty;
                {
                try
                    {
                    _VsechnyPorty = SerialPort.GetPortNames();            //Najdeme vsechny seriove porty na pocitaci
                    CmbCisloPortu.Items.Clear();                        //vyčistíme combobox
                    for (int i = 0; i < _VsechnyPorty.Length; i++)                //vložení do comboboxu
                        {
                        CmbCisloPortu.Items.Add(_VsechnyPorty[i]);
                        CmbCisloPortu.Text = Convert.ToString(CmbCisloPortu.Items[0]);
                        }
                    CmbCisloPortu.SelectedIndex = 0;        //vybrání prvního dostupného comu
                    }
                catch (Exception)
                    {
                    MessageBox.Show(
                        text: "Není dostupné žádné COM zařízení!",
                        caption: "Chyba Serial Portu",
                        buttons: MessageBoxButtons.OK,
                        icon: MessageBoxIcon.Error);

                    if (CmbCisloPortu.SelectedValue == null)
                        {
                        BtnTlacitko.Enabled = false;
                        }
                    else if (CmbCisloPortu.SelectedIndex != 0) ... NEBO zkusit tohle?: (CmbCisloPortu.SelectedValue == true)
                        {
                        BtnTlacitko.Enabled = true;
                        }
                    }
                }
        }

Chci docílit: Rád bych proto znovu zpřístupnil tlačítka ve chvíli, kdy po kliknutí na tlačítko Obnovit seznam portů a bude už připojené nějaké COM zařízení.
Díky za vaše rady a tipy.

 
Odpovědět
11. dubna 7:11
Avatar
Veil
Člen
Avatar
Odpovídá na Daniel Semerák
Veil:11. dubna 10:25

Je jedno jakou logiku použiješ, jestli else if (CmbCisloPortu­.SelectedIndex != 0) ... NEBO zkusit tohle?: (CmbCisloPortu­.SelectedValue == true)
Jen to musíš dát za tu závorku a ne to řešit v catch (Exception), pak to nemůže nikdy nastat, ne? Když očekávaš tady že nemáš žádný port a zároveň když je označený port, tak ukázat button :-)

 
Nahoru Odpovědět
11. dubna 10:25
Avatar
Veil
Člen
Avatar
Veil:11. dubna 10:31

jak jsem to zkopíroval, nevšiml jsem si že tam máš true, musíš použít jen CmbCisloPortu­.SelectedIndex != 0 Upravit už mi to v příspěvku nejde, tak to píši sem.

 
Nahoru Odpovědět
11. dubna 10:31
Avatar
Veil
Člen
Avatar
Veil:11. dubna 10:56

Jen ještě dodatek, když nemáš nic vybraného, je SelectedIndex roven -1, tak si na to uprav tu podmínku :-)

 
Nahoru Odpovědět
11. dubna 10:56
Avatar
Daniel Semerák:11. dubna 11:13

Veil> Díky za rady, ale nejsem si jistý, zdali jsem tě pořádně a správně pochopil, nebo zdali jsem správně vysvětlil svůj problém.
Jde mi totiž o to, že když spustím program a nebude dostupné žádné COM zařízení, tak aby zakázal ten Button.
V případě ale, že když po spuštění programu připojím nějaké fyzické zařízení a kliknu na Obnovit, tak se mi nový COM port ukáže, to funguje, ale už mi nechodí, aby zároven s tím se mi ten Button zpřístupnil a byl znovu aktivní. :-(
Pokud bych klikl na tlačítko Obnovit a žádný COM port by nebyl stále dostupný, aby ten Button byl pořád zakázaný.
To jsem chtěl ošetřit v tomto vlákně "Obnovit seznam portů", jenže se mi to stále nedaří.
Zatím mi funguje jen podmínka:

if (CmbCisloPortu.SelectedValue == null)
                        {
                        BtnTlacitko.Enabled = false;

Snad jsem to už vysvětlil správně.

 
Nahoru Odpovědět
11. dubna 11:13
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Daniel Semerák
Petr Štechmüller:11. dubna 11:35

Ahoj,

to by se dalo celkem jednoduše zařídit. Jednoduše se podíváš na počet itemů v comboboxu: CmbCisloPortu­.Items.Length.
V kódu by to mohlo být asi nějak takhle:

BtnTlacitko.Enabled = CmbCisloPortu.Items.Length != 0;
Nahoru Odpovědět
11. dubna 11:35
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Daniel Semerák:11. dubna 12:52

Petr> Díky za tip.
Jen mi to hází chybu, že pro Length chybí nějaký using, ale to nevím, jaký by měl být. :-(
Jsem ještě pořád takový "pokročilý" začátečník, takže ještě hodně věcí neznám.

 
Nahoru Odpovědět
11. dubna 12:52
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Daniel Semerák
Petr Štechmüller:11. dubna 13:08

V C# nedělám. Ta kolekce Items by měla být schopná vrátit počet prvků, tak si to vygoogli jak na to.

Nahoru Odpovědět
11. dubna 13:08
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Veil
Člen
Avatar
Odpovídá na Daniel Semerák
Veil:11. dubna 13:32

Já to pochopil že chceš ten button zobrazit jen když máš nějaký com port vybraný, ne když tam nic není.

if (CmbCisloPortu.SelectedIndex > -1) BtnTlacitko.Enabled = true;
            else BtnTlacitko.Enabled = false;

Jinak to lze také udělat, jen jestli v cb něco je.

if (cbCisloPortu.Items.Count > 0)
                BtnTlacitko.Enabled = true;
            else
                BtnTlacitko.Enabled = false;
 
Nahoru Odpovědět
11. dubna 13:32
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Veil
Petr Štechmüller:11. dubna 13:36

Pokud bych klikl na tlačítko Obnovit a žádný COM port by nebyl stále dostupný, aby ten Button byl pořád zakázaný.

Tady to píše, že chce mít možnost kliknout na tlačítko pouze, pokud existují nějaké COM porty.

Jinak díky za opravení mého kódu.

Nahoru Odpovědět
11. dubna 13:36
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Daniel Semerák:11. dubna 14:03

Veil a Petr> Chci to ošetřit tak, že když není žádný Com port, tak aby tlačítko Button bylo Disabled.
Pokud ale by se za běhu programu připojilo nějaké zařízení a v CmbBoxu už bych měl např. min. jeden Com port, tak po kliknutí na na tlačítko Obnovit, aby se mi objevil daný Com port v CmbBoxu - to funguje -, ale také zároven aby se mi rozsvítilo to tlačítko Button a bylo aktivní, jinak ne.

Veil> Tak to tvoje poslední řešení mi stejně nefunguje, takže chyba bude ještě někde jinde, ale moc ti děkuji za snahu :-( ... (y)

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

Zobrazeno 11 zpráv z 11.