Změna hodnot v textboxu   otázka

VB.NET

Dobrý den,

narazil jsem na drobný problém. Mám program s více formuláři, v nichž zadávám vstupní hodnoty do textboxů. Po stisknutí tlačítka OK dojde k načtění hodnot z textboxů do paměti a uzavření okna. Pak mě ale napdla taková věc...Co když uživatel přepíše hodnotu v textboxu a okno prostě zavře. Hodnota v textboxu zůstane, ale v paměti není, což může vést ke špatným výsledkům. Napadlo mě při otevření okna ukládat původní hodnoty do pomocných proměnných nebo ješt lépe do tagů textboxů, ale zdá se mi to takové kostrbaté. Nevíte někdo o elegantnějším řešení?

A druhý dotaz...jaká je drobná niance mezi událostni form activated a form shown, popř. form load? Nejsem si jistý zda je používám zcela správně.

Děkuji za případné reakce

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

Pokud se budou hodnoty ukládat v té části kódu, která okno zobrazuje a okno je modální, pak k této situaci nikdy nedojde. V případě, že okno je nemodální, tak stačí ukládání hodnot pověsit na událost FormClosing a také k tomu nedojde.

Load - nastane jednou po inicializaci formuláře.

Activated - nastává vždy, když je formulář aktivován uživatelem nebo kódem.

Shown - nastane vždy po prvním zobrazení formuláře (např. když je schován pomocí Visible = False a následně zobrazen pomocí Visible = True).

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

Děkuji za odpověď. Neporozumněl jsem první části "pokud se budou hodnoty ukládat v té části kódu, která okno zobrazuje a okno je modální, pak k této situaci nikdy nedojde." Používám modální okna a jak jsem si zkusil v nemodálním okně tam ta hodnota opravdu nezůstane. Nicméně nechápu proč tomu tak je.

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

Příklad zobrazení modálního formuláře a náznak kam umístit příslušný kód. Níže uvedený kód je umístěn v hlavním okně aplikace a toto je tedy část kódu, která okno zobrazuje.

Using window As New SettingsForm
  window.ShowDialog(Me)
  'Zde umístit kód pro načtení/uložení hodnot
End Using

Že hodnoty nezůstanou v uzavřeném okně je naprosto jasné, protože v momentě, kdy se okno uzavře začne probíhat garbage kolekce, tedy uvolňování všeho, co instance třídy formuláře v paměti obsahuje.

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

Proč nedeklarovat globální proměnnou do které by mohl uložit hodnotu z jakéhokoliv formuláře programu ?

http://www.vbnet.cz/forum-tema--2248-pro...

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

Globální proměnné jako začátečník nikdy nepoužívejte.

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

a próóóóóč?

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

Protože pak na tu proměnnou budete sahat z padesáti různých míst a v případě, že někde uděláte chybu, ji budete jen velmi obtížně hledat.

Proměnné by měly mít vždy co nejmenší možný scope (ideálně deklarované v metodě nebo jen v bloku, kde se používají, např. uvnitniř For cyklu nebo ifu, pokud nejsou potřeba vně). Pokud už proměnná musí být sdílená z více míst, udělejte ji privátní a deklarujte uvnitř třídy.

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

Protože deklarovat (navíc v tomto případě zcela zbytečně) globální proměnnou je prasárna, která je v rozporu se zásadami OOP.

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

No já to globálními proměnnými řeším. V programu je kolem patnácti formulářů a proměnné jsou potřeba na různých místech programu a to až do konce, kdy se provede finální výpočet.

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

No tak to řešíte tím nejhorším možným způsobem a prasácky. Objektově orientované programování a zapouzdřenost jsou pro vás naprosto cizí pojmy.

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

Je to začátečník, takže se moc není čemu se divit.

Zkuste prostudovat poslední díly seriálu VB.NET od začátku, jsou tam popsány základy objektově orientovaného programování.

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

Pravda. Jsem strojař a vytvářím si program na šroubové spoje a v programování opravdu pokulhávám. Kdbych byl programátor tak bohužel zase nerozumím do hloubky těm šroubovým spojům... takže to si nevyberete. Ale snaha je a to OOP prozkoumám. Díky za rady.

nahlásit spamnahlásit spam 1 / 1 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