podminka if   zodpovězená otázka

ASP.NET WebForms, Komponenty, ASP.NET/IIS

Dobrý den. Snažím se naučit pracovat s asp.net -em a dal jsem si takovy ukol, nyni jiz vim, ze je nad me sily, k reseni jsem se sam neprobral...tak se nyni obracim na Vas s prosbou o pomoc...

mam na strance default.aspx 2 checkboxy, a 1 textbox.

prvni checkbox ma ID="Ano1" nastavil jsem AutoPostBack="True"

druhy checkbox ma ID="Ne1" nastavil jsem AutoPostBack="True"

textbox ma ID="Pocet" nsatavil jsem Enabled="False"

a ja jsem chtel, aby se mi po zaskrtnuti checboxu Ano1 povolil zapis hodnoty do textboxu Pocet a odskrtnutim se se tento textbox znepristupnil (textbox je ve vychozi hodnote Enabled=false) tak jsem si dvojklikem na chekbox Ano1 otevrel default.aspx.cs a do nej jsem chtel zapsat jednoduchy kod pro to,a tady jsem narazil na problem, tak jsem hledal na webu prochazel knizky,ale nikde nenasel jak menit hodnoty v podminkach if

    protected void Ano1_CheckedChanged(object sender, EventArgs e)
    {
        // Zjistím odesílatele:
        CheckBox chbx = (CheckBox)sender;
        // Povolim label podle toho zda je zaškrtnut checkbox
        if (chbx.Checked)
            ...
        else
            ...
    }

nevim jak tam nastavit aby se hodnota textboxu zmenila na enabled=true abych mohl provest zapis do textboxu a v pripade odskrtnuti opet tento textbox zakazat...

Predem dekuji moc za jakoukoliv vypomoc.

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

ještě mě ted napadlo, jestli by neslo spise udelat na textboxu nejakou kontrolu, ktera by kontrolovala stavy na checkboxu Ano1 a na chekboxu Ne1 ,cize v pripade zaskrtnuti Ano1 povoli zapis do textboxu a v pripade zaskrtnuti textboxu Ne1 zapis povolen nebude..tedy vychozi stav ??

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

1.) Proč ten snder přetypováváte na CheckBox? Proč normálně nedáte:

Ano1.Checked

2.) Nevím proč se učíte ASP.NET když neumíte (!) C#. Proč nenapíšete normálně:

if (Ano1.Checked = true)
       Pocet.Enabled = true;
   else
       Pocet.Enabled = false;

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

Třeba takto:

 protected void Ano1_CheckedChanged(object sender, EventArgs e)
    {
        // Zjistím odesílatele:
        CheckBox chbx = (CheckBox)sender;
        // Povolim label podle toho zda je zaškrtnut checkbox
        if (chbx.Checked)
           Pocet.Enabled = true;
        else
           Pocet.Enabled = false;         
    }

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

To si neodpustím :-)

    protected void Ano1_CheckedChanged(object sender, EventArgs e)
    {
        Pocet.Enabled = ((CheckBox)sender).Checked;
    }
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ad 1) Pokud reagujeme na změnu stavu přímo v události konkrétního prvku, vidím přetypování sender jako vhodné řešení. Událost totiž v tomto případě reaguje změnu stavu právě objektu, který ji vyvoláva a proto může být pro někoho nepřirozené využívat toho, že je událost uložena v místě, kde na komponentu vidí, k odkazování se na ni jinak než přes parametr, který dostane.

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

Děkuji i za původního tazatele za velmi cennou radu a ušetření napsaného kódu.Velice elegantní.Nejsem zkušený programátor a tak by mne zajímalo zda je výhoda tohoto zápisu v jednoduchosti a nebo má i nějaké "vedlejší" výhody?

Předem děkuji

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

Výhoda tohoto zápisu je, že nepotřebujete pro každý CheckBox vytvářet vlastní událost, ale stačí všem registrovat třeba...

protected void chk_CheckedChanged(object sender, EventArgs e)
{
  ...
}

Trošku lepší příklad použití může být validace vstupních dat na registračním formuláři. Máte například dvacet textových polí pro zadání hodnot, ale pouze jednu událost, která kontroluje požadované věci (hodnota musí být zadaná, apod.). V danou chvíli díky parametru sender přesně víte, které pole je zrovna validováno a můžete mu ve stejné události třeba změnit barvu pozadí na červenou.

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

Dekuji moc, muj problem jsem vyresil timto prvnim zpusobem, zdal se mi nejjednoduchsi,mno jak jsem se na nej podival (na tu ukazku jak to mam udelat) tak jsem prisel na to v cem jsem delal chybu a spravne to uz opravil.

Proto jeste jednou dekuji moc za vypomoc a vysvetleni.

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