Události – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Události – .NET – Fórum – Programujte.comUdálosti – .NET – Fórum – Programujte.com

 

XP
~ Anonymní uživatel
401 příspěvků
19. 1. 2013   #1
-
0
-

Zdravím,

mám několik instancí stejných grafických prvků na formuláři. Potřeboval bych, aby všechny prvky odchytily vyvolanou událost. Problém je, že událost se vyvolá pouze u prvku, který byl přidán jako první.

Hlavní třída:



...
private delegate void dRefreshVisualNodes();
private event dRefreshVisualNodes RefreshVisualNodes;
...
private void AddNodeToTree(tNode<T> node) // vola se spravne pro vsechny prvky
        {
            _tree.Add(node.id, node);                                   
            RefreshVisualNodes += node.Refresh;                         
            _treeDiagram.Controls.Add(node.GetVisualNode());            
        }
...


private void DrawTree()
        {
            ...
            RefreshVisualNodes();
        }

 Grafický prvek:

public class tNode<T>
    {
	...
	public void Refresh()
        {
            _visualNode.RefreshVisual();
        }
	...
    }

Nevite, kde by mohl byt problem? 

Nahlásit jako SPAM
IP: 109.80.156.–
XP
~ Anonymní uživatel
401 příspěvků
19. 1. 2013   #2
-
0
-

uz jsem na to prisel :). Chyba byla jinde. V metode _visualNode.RefreshVisual(); ktera chtela precist data z neicializovane promenne - zajimave ze to nehodilo zadnou vyjimku/chybu. 

Nahlásit jako SPAM
IP: 109.80.156.–
XP
~ Anonymní uživatel
401 příspěvků
21. 1. 2013   #3
-
0
-

Zajímala by mě ještě jedna věc:

Mám třídu A. Tato třída A má několik instancí třídy B. Každá třída B má ještě instanci třídy C. Třída C generuje několik událostí (zatím 5). Nakonec třída C má instanci třídy D, která může taky vyvolat událost. Tyto události jsou třeba odchytit ve třídě A. 

Obslužné metody třídy A jsou předávány postupně přes třídy B, C popř. D, kde jsou potom přidány do instance události. Je toto správné řešení? Nebo se to dělá jinak, aby to zbytečně nemuselo probublávat přes všechny třídy?

Nahlásit jako SPAM
IP: 109.80.156.–
Vaizo0
Stálý člen
21. 1. 2013   #4
-
0
-

#3 XP
Tak ty tu událost můžeš klidně navázat i rovnou na A a nemusíš "probublávat". Spíš by mě zajímalo, proč tam máš tolik té dědičnosti. Nebylo by místo toho lepší použít kompozici? 

Na první pohled mi to příjde dost komplikované ...

Nahlásit jako SPAM
IP: 85.93.127.–
XP
~ Anonymní uživatel
401 příspěvků
21. 1. 2013   #5
-
0
-

Události jsou navázané na třídu A, ale handlery na ty události se předávají postupně z třídy A až do C (D).

Třídy po sobě nedědí, ale mají pouze jejich instance.

No abych to uvedl názorněji:

Třída A: je datový strom - načítá data z disku, zobrazuje data uživateli, algoritmy pro práci se stromem.

Třída B: uzel, list stromu - základní informace, rodič a seznam potomků

Třída C: komponenta - pouze zobrazuje základní info uživateli, vyvolá událost při stisku tlačítko např. přidat uzel, přidat data, smazat uzel

Třída D: Editor uzlu  

Nahlásit jako SPAM
IP: 109.80.156.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 104 hostů

Podobná vlákna

C# události — založil Wabbit

Udalosti v C# — založil jirkab

Udalosti ve windows — založil Tom9k

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý