Jak fungují Show/Hide a Remove/Add?   otázka

VB.NET

Dobrý den,

mám definováno několik panelů (v "záhlaví") jako private withevents. Každý z panelů má na sobě několik comboboxů (také private withevents).

V kódu je procedura, která zobrazí panel pomocí .add a na něm stejným způsobem comboboxy.

Další procedura současný panel schová (zkoušel jsem to jak pomocí hide(), tak .remove) a zobrazí jiný panel, tak jako v odstavci výše.

Pokud takto nějaký panel zobrazím, comboboxy fungují. Když dále zobrazím jakýkoli jiný panel, také se v pořádku zobrazí a comboboxy také fungují. Stejně tak můžu se čtvrtým, pátým atd dokud se ale nevrátím na některý, který jsem již použil - panel i s combobxy se sice zobrazí, ale comboxy nefungují (pomocí msgboxu jsem ověřil, že selectedindex = -1, a procedury selectedindexchanged se nespouštějí.

Předpokládám tedy, že řešení mého problému pomocí Show/Hide nebo Remove/Add, není zcelá správné - jak jinak by se tedy tento problém dal řešit? A pokud se to takto řešit dá, poraďte prosím, jaká základní souvislost mi unikla či kde dělám chybu.

Předem díky všem!

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

K tomuto nesmyslnému dotazu mohu říct jenom to, že pokud odeberete ovládací prvek z kolekce Controls, zruší se samozřejmě i přiřazení handleru jeho události SelectedIndexChanged.

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

Přiznám se že tomu nerozumím...

V první proceduře přidám panel pomocí .add a combobox pomocí .add

V druhé vyjmu panel pomocí .remove

Ve třetí přidám znovu (stejný) panel pomocí .add a (stejný) combobox pomocí .add

-> to tedy nelze?

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

a stejné je to i když použiji panel.hide() ?

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

K přidávání ovládacích prvků programově není normálně žádný důvod. Vše se přidává v návrhovém režimu. Metody Show a Hide rozhodně nedělají to samé co Add a Remove. Naučte se základy.

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

Nechci z toho dělat sáhodlouhou debatu o ničem a omlouvám se za ne zcela srozumitelné vyjadřování. Jen doplním, že samozřejmě znám rozdíly (alespoň tedy ty podstatné) mezi metodami hide/show a remove/add, obě používám je při svém hraní s VB celkem často a bez problému. (Připadá mi spíš, že si nerozumíme.) Zkusím tedy trochu jiné dotazy:

- v návrhovém režimu je to samozřejmě jednoušší, jen mi vznikla potřeba, nahrazovat za běhu programu jeden panel s ovládacími prvky jiným panelem a nevím jak jinak to udělat než takto. Za nějaký typ budu rád.

- I pokud tedy od metody, kterou jsem popisoval opustím, rád bych principielně pochopil, proč dochází k tomu, že když prvek přidám, poté vyjmu a pak zase přidám, tak strácí funkčnost (popřípadě, zda to tak být nemá a dělám tedy nějakou hovadinu), může se mi to (i dalším čtenářům fóra) hodit v budoucnu i při řešení jiných problémů.

Díky za Váš čas

Jakub

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

Nahrazovat panely za běhu je zcela zbytečné, lze použít buď TabControl nebo další formulář.

Samozřejmě že po odebrání z Controls přestane fungovat SelectedIndexChanged, protože se zruší instance ovládacího prvku a tím i jeho propojení s handlerem této události.

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