Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Daniel Semerák:11.4.2021 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.4.2021 7:11
Avatar
Veil
Člen
Avatar
Odpovídá na Daniel Semerák
Veil:11.4.2021 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.4.2021 10:25
Avatar
Veil
Člen
Avatar
Veil:11.4.2021 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.4.2021 10:31
Avatar
Veil
Člen
Avatar
Veil:11.4.2021 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.4.2021 10:56
Avatar
Daniel Semerák:11.4.2021 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.4.2021 11:13
Avatar
Odpovídá na Daniel Semerák
Petr Štechmüller:11.4.2021 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.4.2021 11:35
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Daniel Semerák:11.4.2021 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.4.2021 12:52
Avatar
Odpovídá na Daniel Semerák
Petr Štechmüller:11.4.2021 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.4.2021 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.4.2021 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.4.2021 13:32
Avatar
Odpovídá na Veil
Petr Štechmüller:11.4.2021 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.4.2021 13:36
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Daniel Semerák:11.4.2021 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.4.2021 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.