Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:30.5.2013 16:29

Ahoj,
potřeboval bych něco, co by provedlo danou akci při změně hodnoty proměnné. Mám asi 10 tlačítek, každé proměnné přidá nebo ubere určitý číslo a podle hodnoty proměnné se potom mění něco jiného. A psát pod každý z 10 tlačítek

if ( a == 10)
//něco
else if (a == 15)
//atd

mi 1. příde nepřehledné a navíc by 10x70 řádků ten kód asi trošku prodloužilo a za 2. s tim ms visual určitě něco umí.
Na zkoušku sem tam zkusil napsat

 private void a_ValueChanged(object sender, EventArgs e)  //a mam proměnnou
        {
            MessageBox.Show(Text = "");
        }
//tohle by mi teoreticky mělo při změně hodnoty ukázat msgbox

ale nic se nestalo, ale error mi to nedávalo. Tak jak na to?

Editováno 30.5.2013 16:31
Odpovědět 30.5.2013 16:29
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Adam Ježek
Kit:30.5.2013 16:33

Dej ten test i reakci přímo do setteru.

Nahoru Odpovědět 30.5.2013 16:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Kit
Adam Ježek:30.5.2013 16:36

mohl by jsi psát ohleduplně k mému skillu?

Nahoru Odpovědět 30.5.2013 16:36
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Odpovídá na Adam Ježek
Michal Žůrek (misaz):30.5.2013 16:43

skil víceméně nic neznamená

použij místo proměnné vlastnost
http://msdn.microsoft.com/…9fsa0sw.aspx

podmínku piš do set

Editováno 30.5.2013 16:43
Nahoru Odpovědět 30.5.2013 16:43
Nesnáším {}, proto se jim vyhýbám.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Adam Ježek
Kit:30.5.2013 16:46

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.

Nahoru Odpovědět 30.5.2013 16:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Kit
Adam Ježek:30.5.2013 16:51

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

Nahoru Odpovědět 30.5.2013 16:51
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Adam Ježek
David Čápka:30.5.2013 16:53

Použij sender, podívej se sem, kde se to řeší: http://www.itnetwork.cz/…rms-aplikace

Nahoru Odpovědět 30.5.2013 16:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Adam Ježek
Kit:30.5.2013 16:54

Ale v jakém objektu ji máš? Test i reakce se přidají do vlastností toho "a".

Nahoru Odpovědět 30.5.2013 16:54
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Kit
Adam Ježek:30.5.2013 17:07

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(ob­ject 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

Nahoru Odpovědět 30.5.2013 17:07
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Adam Ježek
Kit:30.5.2013 17:12
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.

Nahoru Odpovědět 30.5.2013 17:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
matesax:30.5.2013 17:49
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...

Editováno 30.5.2013 17:52
 
Nahoru Odpovědět 30.5.2013 17:49
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Adam Ježek
Petr Nymsa:30.5.2013 18:01

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í

Nahoru Odpovědět 30.5.2013 18:01
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na matesax
Jan Vargovský:31.5.2013 2:00

Správně by mělo být:

set
    {
        a = value;
        if(ValueChanged != null)
            ValueChanged();
    }

ne?

 
Nahoru Odpovědět 31.5.2013 2:00
Avatar
matesax
Redaktor
Avatar
Odpovídá na Jan Vargovský
matesax:31.5.2013 5:43

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);
Editováno 31.5.2013 5:45
 
Nahoru Odpovědět 31.5.2013 5:43
Avatar
matesax
Redaktor
Avatar
Odpovídá na Jan Vargovský
matesax:31.5.2013 5:56

A když už - tohle je výjimka - takže try blok...

 
Nahoru Odpovědět 31.5.2013 5:56
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:2.6.2013 22:25

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 ... :)

 
Nahoru Odpovědět 2.6.2013 22:25
Avatar
matesax
Redaktor
Avatar
Odpovídá na Jan Vargovský
matesax:3.6.2013 5:57

Co to tu zase máme za výlev? :) Ty tu vidíš rozhraní?

Editováno 3.6.2013 5:57
 
Nahoru Odpovědět 3.6.2013 5:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.