Kde je uložen formulář?   zodpovězená otázka

Visual Studio

Dobrý den, někdy se mi stane, že při změnách formuláře je formulář změněn v režimu návrhu, ale ve spuštěném programu se zobrazí s komponentami, které jsem třeba v průběhu práce odstranil. V kódu (Windows Form Designer generated code) ať šáhnu na cokoli vyhodí to chybu.

Ve VB 6 je formulář uložen hned vedle projektu, jak je to u VBNET 2008? Díky.

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

Formulář jako takový ve VB2005 neexistuje (u 2008 to asi bude stejné). Vytváří se až při chodu aplikace dynamicky. To, že si ho vizuálně "namalujeme" a sestavíme v Formx.vb[Design] je pouze vymoženost grafického rozhranní - Visual Studio jakoukoliv naši činnost ve fázi návrhu okamžitě na pozadí převádí do kódu a ten si ukládá do Formx.Designer.vb (jedná se o Partial class k naší třídě Formx class). Proto taky VS nadává, pokud sáhneme do této automaticky generované třídy, protože ta interakce je jednostranná (změny v grafickém návrhu promítne do kódu, ale už to nehlídá zpětně).

Jestli Vám tedy nejdou zrušit nějaká Controlls z formuláře, bude problém někde jinde:

- buď ta controlls vytváříte sám až za běhu aplikace (mimo grafický návrh), což ale nepředpokládám, protože byste v Designeru neměl co zrušit)

- nebo ve svém solution sice změnu provedete, ale spustíte již zkompilovaný kód z předchozí verze

- nebo při úpravách dojde k nějaké chybě v kódu (zůstane Vám tam třeba nějaký odkaz na právě zrušený Controlls) a pokud spustíte debuger, tak ten se Vás zeptá něco na způsob " Byla nalezena chyba v kódu, mám spustit poslední funkční kompilaci?" no a pokud řeknete ano, pak se jedná o předešlý případ (spustí se Vám aplikace ve stavu před změnami.

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

Mal som ten istý problém ale vo VB2005. Dosť som sa s tým natrápil kým som na to došiel. Tuším stačilo keď som projekt uložil a ešte som aj spustil Build projektu. Potom sa zmeny prejavili aj v spustenom projekte

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

Díky za vysvětlení, zjistil jsem, že se to stává pouze v případech, kde se snažím komponenty přidávat za běhu programu a asi blbě. Ve VB 6 existuje vlastnost index a jednoduše jde objekty množit za běhu, zde to asi dělám špatně.

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

Komponenty za běhu přidávat i ve VB 2005/2008 samozřejmě lze (ostatně, jak jsem psal již výše, visual basic to sám nedělá jinak, pouze si to píše do své části Partial souboru), ale indexování, jako u VB6 tady není, řeší se to jinými způsoby. Koukněte do zdejší diskuse, již se to tady mnohokrát řešilo.

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

NIKDY neměňte kód vytvořený návrhářem (Form1.Designer.vb), to je zásadní pravidlo. Návrhář si tento kód spravuje sám, takže jestliže ho změníte, kdykoliv vám může váš kód přepsat, nebo naopak pozapomenout a pak vznikají vámi popisované problémy.

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

Přesně tak. Designer přímo pracuje s tímto kódem a pokud jeho chování a kroky při úpravách do podrobna neznáte, bude to vést k problémům. I když často je to nejrychlejší způsob jak něco na formuláři opravit nebo vylepšit.

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