Ik vind met Google niet echt veel duidelijke uitleg over custom event handlers, of user defined event handlers, dus ik weet niet zeker of datgene wat ik wil doen zo noemt. Ik zal daarom een simpel codevoorbeeldje geven en aan de hand daarvan duidelijk maken wat ik wil bekomen.
Ik heb een class "Form1" die een andere class "Form2" aanroept. Een van de event handlers van Form2 is bijvoorbeeld "Click" (Form2 is een form waarbij Click een voorgedefinieerde System.EventHandler is). Die Click event wordt in Form1 onderschept om er iets mee te doen. Enkel de relevante code is weergegeven:
Allemaal goed en wel, maar eigenlijk zou ik graag een eigen - niet-voorgedefinieerde event aan Form2 willen hangen. Helaas vind ik nergens duidelijke uitleg hierover, waarschijnlijk omdat ik de verkeerde zoektermen gebruik. Ik heb al wel gevonden hoe ik zelf een event aanmaak, maar niet hoe ik deze trigger en in Form1 gebruik.
De bedoeling is dus dat wanneer Functie() in Form2 uitgevoerd wordt (door god-weet-wat - is nu niet van belang), dat deze de Test event triggert vergelijkbaar met de Click event uit het eerste voorbeeld. Deze Test event moet dan in Form1 onderschept worden en gekoppeld worden aan de functie Form2Test().
Ik hoop dat ik het wat duidelijk heb kunnen omschrijven.
Wat ik wil is wel mogelijk denk ik. Immers, bij controls werkt het probleemloos zoals m'n eerste voorbeeld al aangaf. Maar daarbij gaat het om voorgedefinieerde events. Nu wil ik een eigen event gebruiken...
Ik heb een class "Form1" die een andere class "Form2" aanroept. Een van de event handlers van Form2 is bijvoorbeeld "Click" (Form2 is een form waarbij Click een voorgedefinieerde System.EventHandler is). Die Click event wordt in Form1 onderschept om er iets mee te doen. Enkel de relevante code is weergegeven:
C#:
1
2
3
4
5
6
7
8
| public class Form2 { ... public Form2() { ... } } |
C#:
Het is duidelijk dat wanneer ik op Form2 klik, de event in Form1 onderschept zal worden en de messagebox zal verschijnen.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public class Form1 { ... public Form1() { Form2 f2 = new Form2(); // Click event handler van Form2 f2.Click += new System.EventHandler(this.Form2Clicked); ... } // Wanneer de Click event van Form2 onderschept wordt, // wordt deze functie uitgevoerd. private Form2Clicked(object sender, System.EventArgs e) { MessageBox.Show("Geklikt op Form2"); } } |
Allemaal goed en wel, maar eigenlijk zou ik graag een eigen - niet-voorgedefinieerde event aan Form2 willen hangen. Helaas vind ik nergens duidelijke uitleg hierover, waarschijnlijk omdat ik de verkeerde zoektermen gebruik. Ik heb al wel gevonden hoe ik zelf een event aanmaak, maar niet hoe ik deze trigger en in Form1 gebruik.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public delegate void TestEvent(); public class Form2 { public event TestEvent Test; ... public Form2() { ... } private void Functie() { // Hier zou ik de Test event willen triggeren. ????????? } } |
C#:
De vraagtekens duiden op de stukken die ik niet voor mekaar krijg. Dus kortweg weet ik niet hoe ik een event handler trigger. Nou ja, ik heb wel al met Invoke kunnen triggeren, maar dat lukt me enkel binnen dezelfde class omdat Invoke een target nodig heeft. Als dat target in dezelfde class ligt is dat geen probleem, maar nu bevindt het target (Form2Test) zich in de parent class (Form1). Form2 kan echter de variabelen en functies van Form1 niet zien (of ik moet met public static gaan werken en dat is absoluut niet de bedoeling).1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public class Form1 { ... public Form1() { Form2 f2 = new Form2(); // Hier zou ik de Test event handler van Form2 // willen koppelen aan Form2Test() f2.Test += ????????? ... } // Wanneer de Test event van Form2 onderschept wordt, // wordt deze functie uitgevoerd. private void Form2Test() { MessageBox.Show("Test van Form2"); } } |
De bedoeling is dus dat wanneer Functie() in Form2 uitgevoerd wordt (door god-weet-wat - is nu niet van belang), dat deze de Test event triggert vergelijkbaar met de Click event uit het eerste voorbeeld. Deze Test event moet dan in Form1 onderschept worden en gekoppeld worden aan de functie Form2Test().
Ik hoop dat ik het wat duidelijk heb kunnen omschrijven.
Wat ik wil is wel mogelijk denk ik. Immers, bij controls werkt het probleemloos zoals m'n eerste voorbeeld al aangaf. Maar daarbij gaat het om voorgedefinieerde events. Nu wil ik een eigen event gebruiken...
[ Voor 3% gewijzigd door mahi op 29-09-2005 14:39 ]
A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.