Kezdőoldal » Számítástechnika » Programozás » El tudnátok nekem nagyon...

El tudnátok nekem nagyon egyszerűen magyarázni részletesen, hogy ez pontosan mit jelent, mit csinál? Button btn = (Button) sender;

Figyelt kérdés
nagyon kezdő vagyok és egy egyszerű kis számolós programot akarok létrehozni, de nem teljesen értem ez a parancs mit csinál pontosan

2019. júl. 1. 14:05
 1/8 anonim ***** válasza:
60%

Button típusra castolja az eseménykezelő függvény sender objektumát.

Ha nagyon kezdő vagy, akkor elég sok olyan fogalom van, amit nem érthetsz ebből, dehát nem véletlenül konzol alkalmazásokkal szokás kezdeni a tanulást és nem grafikus dolgokkal.

2019. júl. 1. 14:20
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:
a legalapabb fogalmakkal tisztábn vagyok, meg nagyon alap dolgoakt meg tudok írni konzolosan, csak érdekelt a form is, meg hogy hogy írnak meg számológépet, szóval ezért is érdekelne, pontosan ez a parancs mit csinál.
2019. júl. 1. 14:54
 3/8 anonim ***** válasza:
71%

Akkor tegyük fel, hogy van valami ilyened:

Float elso = 3.0;

Int masodik = (int) elso;


Ugye az első sor létrehoz egy float típusú változót, aminek az értéke pont 3. A második sor létrehoz egy integer változót, aminek az elso értékét (tehát 3-at adja). Ugye ez így egyszerű: lebegőpontos (tehát az értéke lehet nem egész is) értéket átrak egy olyan változóba, ami csak egész számot tud tárolni. A számítógépnek viszont ez nem mindig egyértelmű, ezért zárójelben megsúgja, hogy igen, ez az érték egész szám.


Na pont ugyanezt csinálja a fenti sor is. A sender változó eredetileg nem Button típusú, ezért zárójelben megmondod a gépnek, hogy de ez egy Button.


Kb ennyi, remélem érthető.

2019. júl. 1. 15:50
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:
óóó,így már értem. nagyon köszönöm!!
2019. júl. 1. 17:01
 5/8 anonim ***** válasza:
73%

Na akkor leírom , hogy miket tanulj meg hogy nagyjából megértsd ezt normálisan:


Mi az osztály (egységbezárás)?

Mi az a tagváltozó/tagfüggvény?

Mi az öröklés, poliformizmus?

Mi C#-ban az "object" (osztály)?

Mi az objektum?

Mi az a objektumreferencia?

Mi az a függvényreferencia (delegált)?

Mi az az esemény (event)?


Mi a különbség az érték és a referenciatípus között?

Mi az a Boxing/Unboxing?


Ezekre a kérdésekre is érdemes keresned a választ.

Hajrá!

2019. júl. 1. 17:01
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:

Miért van minden válasz eléggé lepontozva?

Rákattintottam a kérdésre, hogy én is tanuljak belőle, meg kell mondjam, még hasznos is volt számomra. Miért vannak lepontozva?

2019. júl. 2. 11:11
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:

Nagyon nagyon szépen köszönöm még egyszer a segítséget! ;)


utolsó válaszoló: én se értem miért van lepontozva, aki lepontozta... azhülye:D mert nagyon érthetően lett elmagyarázva.

2019. júl. 2. 12:05
 8/8 anonim ***** válasza:

Ennek akkor van igazán jelentősége, ha több gombhoz ugyanaz az eseménykezelő van hozzárendelve. Például a programodban kóddal generálsz gombokat, mondjuk így, WinForms alatt:

for (int i = 0; i < 10; i++) {

.. Button b = new Button() {

.. .. Tag = i;

.. .. //beállítod még a Top, Left, Width, Height property-ket is

.. };

.. b.Click += this.GeneratedButtonClicked;

}


És van egy EventHandler delegate-nek megfelelő metódusod:

private void GeneratedButtonClicked(object sender, EventArgs e) {...}


Az EventHandler egy kétparaméteres, void visszatérési értékű metódust ír le, melynek paraméterei

- sender: megadja, hogy melyik objektumon váltódott ki a kivétel (jelen esetben melyik gombra kattintottak)

- e: további információkat ad az eseményről - ez most nekünk nem érdekes.


Mint láthatod, a sender típusa object, amivel túl sok mindent nem tudunk kezdeni. Valamikor az ősidőkben ez azért lett így kitalálva, hogy az EventHandler delegate újrahasznosítható legyen, csak akkor még nem léteztek a generikusok sem nagyon, így az egyetlen megoldás az volt, hogy object-ként adják tovább a referenciát, amin az esemény történt, aztán kódon belül majd cast-olással visszanyerjük az eredeti típust - elvégre fejlesztőként úgyis tudjuk, milyen típusok jöhetnek szóba, hiszen mi írjuk a kódot. Valahogy így:

Button senderButton = null;

try {

.. senderButton = (Button)sender;

}

catch (InvalidCastException) {

.. return;

}

//kezeled az eseményt


vagy így:

Button senderButton = sender as button;

if (senderButton == null) return;

//kezeled az eseményt


vagy C# 6 óta így:

if (sender is Button senderButton) {

.. //kezeled az eseményt

}

2019. júl. 2. 23:50
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!