[c#] events en childforms

Pagina: 1
Acties:

  • Bint
  • Registratie: Juli 2002
  • Laatst online: 18:12
Ik heb het volgende probleem:

ik heb een UI, een class met working code, een knop in de UI, en als ik daarop druk komt er een overzichtje. Daar zit weer een knop, waarna er weer een form openspringt. daarop kan ik data invoeren.

Nu wil ik graag, dat als er data is ingevooerd//toegevoegd, dat er code uit D wordt uitgevoerd.
Maar hoe doe ik dat? Ik weet dat ik met events moet werken, maar moet ik dan in class B en C een event aanmaken, zodat die aan ieder object wordt "doorgegeven", en uiteindelijk code uit D wordt uitgevoerd? Of is het mogelijk dat ik rechtstreeks vanaf C code uit D kan uitvoeren?


Sorry, maar net als ik denk dat ik het begrijp, heb ik het toch weer mis ;)

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class A  //parent window
{
public A() // User Interface
  {
     B b = new B();  //child window
     D d = new D();  // working code
  }
}

class B  //child window of parent
{
public B() //Form overview data
  {
     C c = new C();
  }
}

class C// child of B: data toevoegen.
{
public C() 
  {
     //Als er nieuwe data wordt ingevooerd, moet er code uit class D worden uitgevoerd. 
     // Deze wordt geinstantieerd in class A
  }
}

class D // some code
{
public D() {}
}

Memories of yesterday, will grow, but never die


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 17:07
Het meest nette is waarschijnlijk wel om met events te werken. Een andere mogeljkheid is om bijvoorbeeld met singletons van je formulieren te werken en dan daar rechtstreeks informatie van ophalen of wijzigen.

  • Bint
  • Registratie: Juli 2002
  • Laatst online: 18:12
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public delegate void bla(string bliep);

class A  //parent window
{
public A() // User Interface
  {
     B b = new B();  //child window
     b.bladiebla += new bla(Onbla)
     D d = new D();  // working code
  }
  private void Onbla(string bliep)
  {
     d.executecode(bliep);
  }
}

class B  //child window of parent
{
public event bla bladiebla;
public B() //Form overview data
  {
     C c = new C();
     c.bladiebla += new bla(Onbla);
  }
  private Onbla(string bliep)
  {
    this.bladiebla(bliep);
  }
}

class C// child of B: data toevoegen.
{
public event bla bladiebla;
public C() 
  {
      this.bladiebla("bliep")[s][/s];
     //Als er nieuwe data wordt ingevooerd, moet er code uit class D worden uitgevoerd. 
     // Deze wordt geinstantieerd in class A
  }
}

class D // some code
{
public D() {}
}


maar moet ik het nu zo doen (zoals bovenstaand)? Of is er een gemakkelijkere manier?

Memories of yesterday, will grow, but never die


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

er bestaat ook een mogelijkheid om events "door te geven":
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class B
{
   public MyEventHandler MyEvent;
   public void OnMyEvent()
   {
     if (MyEvent != null)
       MyEvent(this, new EventArgs());
   }
}

public class A
{
   private B b = new B();
   public MyEventHandler MyEvent
   {
      add { b.MyEvent += value; }     // moet je doen denken aan get/set
      remove { b.MyEvent -= value; } // maar dan met events
   }
}

// gebruik
public class Main
{
  public static void MyEventHandlerFunction(object sender, EventArgs e) { ... }
  public static Main()
  {
      A a = new A(); // A construeert tegelijk ook een B
      a.MyEvent += new MyEventHandler(MyEventHandlerFunction);
      // equivalent met a.b.MyEvent += new MyEventHandler(MyEventHandlerFunction);
      // dus het B object krijgt de handler
  }
}


edit: op aanvraag uitgebreid

[ Voor 59% gewijzigd door H!GHGuY op 13-04-2006 19:51 ]

ASSUME makes an ASS out of U and ME


  • Bint
  • Registratie: Juli 2002
  • Laatst online: 18:12
HIGHGuY schreef op donderdag 13 april 2006 @ 16:01:
er bestaat ook een mogelijkheid om events "door te geven":
C#:
1
2
3
4
5
6
7
8
9
public class A
{
   private B b = new B();
   public MyEventHandler MyEvent
   {
      add { b.MyEvent += value; }
      remove { b.MyEvent -= value; }
   }
}
sorry, ik ben denk ik te dom om dat effe goed in me op te nemen :(

Memories of yesterday, will grow, but never die


  • Piels
  • Registratie: Maart 2001
  • Laatst online: 12-12-2025
Op http://www.codeguru.com staat een goede practice met Delgates en Event handling

Volgens mij precies wat jij zoekt.

[ Voor 6% gewijzigd door Piels op 14-04-2006 09:34 ]

Windows Phone Apps: Belstatus, Pinautomaten

Pagina: 1