Diskuze: změna hodnoty proměnné a vyvolání akce
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
skil víceméně nic neznamená
použij místo proměnné vlastnost
http://msdn.microsoft.com/…9fsa0sw.aspx
podmínku piš do set
Proměnná "a" zcela jistě není samostatná proměnná, ale nějaká vlastnost nějakého objektu. Obvykle ji nastavuješ asi nějak takto:
int a { get; set; }
Ten test na hodnotu a reakci můžeš umístit přímo do sekce set, i když
v tomto případě by asi bylo vhodnější napsat metodu
setA(hodnota)
nebo ještě lépe metodu addA(hodnota)
,
která se postará o požadovanou reakci. V tlačítku pak jen zavoláš
objekt.addA(2)
pro přičtení "2" k vlastnosti A. Metoda se
postará o zbytek.
mam ji jen zadanou
float a
a potom u tlačítek sou věci typu
private void button1_Click(object sender, EventArgs e)
{
a = a + 0.15;
}
a aby pod každym byly hromady podmínek, to bych byl radši, aby to bylo někde tělo pro tu podmínku, ale co sem pochopil, tak to asi nejde
Použij sender, podívej se sem, kde se to řeší: http://www.itnetwork.cz/…rms-aplikace
Ale v jakém objektu ji máš? Test i reakce se přidají do vlastností toho "a".
tak nejdřív, co myslíš tim testem? jinak vlastnosti sou jenom typ
proměnné, to float, ne? a jestli tim objektem myslíš tělo daného
tlačítka nebo tak, tak mam ji založenou na začátku, eště před private
void form1_load a pod ní mam pak ty tlačítka a pod ně sem zkusil napsat
to
private void a_ValueChanged(object sender, EventArgs e)
{
//něco
}
jinak proměnnná funguje, když sem to zkusil přes if dát do kódu toho
tlačítka, tak msgbox ukazovalo
if ( a == 10) ...
je test hodnoty. Můžeš ho dát dovnitř proměnné (tedy vlastnosti) "a" nějakého objektu. Tím nemyslím tlačítko, protože tlačítko tomu objektu má za úkol poslat zprávu, aby se změnila hodnota "a". Objekt to provede, vyhodnotí "a" a udělá příslušnou reakci.
Určitě se nesnaž změnu "a" dělat uvnitř tlačítka.
private int a = 0xFF;
Action ValueChanged { get; set; }
public int Value
{
get { return a; }
set
{
a = value;
ValueChanged();
}
}
...
ddd.ValueChanged = () => MessageBox.Show("Hodnota nastavena na" + ddd.Value);
Téže by to šlo anonymní funkcí atd...
PJak už zaznělo -> používej vlastnosti. Pokud checeš zaregovat na změnu, zareaguj přímo ve vlastnosti. Jinak na to tvé reagování -> jemnuje se to Event (Událost) a zatím se tím nezatěžuj. Udělej to tedy jak to píšou ostatní
Správně by mělo být:
set
{
a = value;
if(ValueChanged != null)
ValueChanged();
}
ne?
No jo - detail... Místo toho jej můžeš initializovat v konstruktoru a nebudeš muset větvit - což mi přijde lepší...
private int a = 0xFF;
Action ValueChanged { get; set; }
public int Value
{
get { return a; }
set
{
a = value;
ValueChanged();
}
}
Konstruktor:
ValueChanged = new Action();
...
ddd.ValueChanged = () => MessageBox.Show("Hodnota nastavena na" + ddd.Value);
Proč vytvářet něco, co se nepoužívá ? Chápu, že ten optimalizer VS to asi vymaže z kódu, když to nebude nikde implementované, ale i tak ...
Co to tu zase máme za výlev? Ty tu vidíš rozhraní?
Zobrazeno 17 zpráv z 17.