TextBox s automaticky počítanou hodnotou   otázka

VB.NET

Dobrý den.

Mám ve formu tři TextBoxy. Dva jsou nabindované na položky v databázi, z toho jeden je Enabled=False, protože hodnota v něm se mění z nějaké funkce po stisku nějakého buttonu nebo při přechodu na další položku databáze (čili není možné ho editovat přímo).

Druhý nabindovaný je možné měnit přímo.

U třetího chci, aby rovnou zobrazoval hodnotu vypočtenou na základě hodnot těch dvou TextBoxů, např. tedy TextBox3.text = TextBox2.text / TextBox1.text (teď neřeším pro jednoduchost přetypování).

V Accessu se dá do vlastnosti formulářového TextBoxu přímo zadat vzoreček, který se automaticky provede, aniž by bylo třeba volat nějaký handler události, tzn. při jakékoli změně TextBox1.text nebo TextBox2.text se změní i ta vypočtená TextBox3.text.

Nenapadá mně, jak a kam zadat ten vzoreček, aby docházelo "automaticky" k přepočtu té hodnoty.

Chápu, že správně by asi bylo vytvořit proceduru, která vypočte tu novou hodnotu TextBox3.text a přiřadit jí jako handler pro události TextBox1.TextChanged i pro TextBox2.TextChanged . Jenže pro událost TextBox1.TextChanged už jeden obslužný handler mám a tak si nejsem jist, zda stejná událost vyvolá všechny handlery, které jsou pro ní definované a jestli nějak záleží na pořadí toho volání atd.

Proto jsem myslel, že nejjednodušší by bylo někde nadefinovat, že vlastnost TextBox3.text je automaticky vypočítávaná hodnota a víc se o to nestarat, ale to asi přemýšlím špatně, že?

Děkuji.

Petr Vavřinec

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

Dobrý den,

Mam takový nápad, ale není nic moc. Možná Vás to také napadlo.

Vložit Váš vzoreček do timeru.

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

Proč? Handler je událostní procedura, provede se při změně hodnoty v některém TextBoxu. Tím bude splněno požadované:

"U třetího chci, aby rovnou zobrazoval hodnotu vypočtenou na základě hodnot těch dvou TextBoxů"

Jestli je potřeba v proceduře po změně hodnoty provést různý kód, poslouží podmínka. Tedy vše se provede v jednom handleru - tím je problém: "Jenže pro událost TextBox1.TextChanged už jeden obslužný handler mám a tak si nejsem jist, zda stejná událost vyvolá všechny handlery" vyřešený.

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

Multihandlery jsou v pořádku, jen musíte dát pozor, aby měli stejnou signaturu. Ale to bude u dvou stejných událostí (TextChanged, SelectedIndexChanged) v pořádku, takže nevidím problém v tom vytvořit kód jako tento:

Private Sub ComputeThirdValue(sender As Object, e As EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged
    TextBox3.Text = (CInt(TextBox1.Text)*CInt(TextBox2.Text))
End Sub
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