PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : multiple events?


beta3
2003-11-13, 14:44:11
hi

kann mir bitte jemand helfen

ich will wissen, wie man mehrere click oder andere events ausloest, aber die immer anders sind
z.b.
beim 1. klick auf button1: das
beim 2. klick .... : was andres
...
..
..

und immer so weiter
geht das???

danke

p.s.:
ich brauche es bitte in c#

Demirug
2003-11-14, 17:42:36
Natürlich geht das.

Suchst du die klasische Lösung oder ein moderne OOP Verfahren?

beta3
2003-11-14, 18:41:26
Original geschrieben von Demirug
Natürlich geht das.

Suchst du die klasische Lösung oder ein moderne OOP Verfahren?

keine ahnung
gibt es da unterschiede??

es sollte für einfache programme sein, nix komplexes und nix systemnahes

Demirug
2003-11-14, 18:58:57
Natürlich gibt es da unterschiede

Klasisch:


protected int actionid = 0;

private void button1_Click(object sender, System.EventArgs e)
{
switch (actionid)
{
case 0:
Function1 ();
actionid = 1;
break;

case 1:
Function2 ();
actionid = 2;
break;

case 2:
Function3 ();
actionid = 0;
break;
}
}


OOP (Delegate Variante):


protected void Function1 ()
{
handler = new ClickHandler (Function2);
}

protected void Function2 ()
{
handler = new ClickHandler (Function3);
}

protected void Function3 ()
{
handler = new ClickHandler (Function1);
}

protected delegate void ClickHandler ();

protected ClickHandler handler;

private void button2_Click(object sender, System.EventArgs e)
{
handler ();
}


handler muss natürlich am Anfang noch auf die Methode gesetzt werden die als erstes ausgeführt werden soll.

Zum Beispiel so:


public Form1()
{
InitializeComponent();

handler = new ClickHandler (Function1);

}


Es gibt auch noch eine Variante mit Interface und Klassen aber bei C# würde ich die nicht benutzten.

grakaman
2003-11-15, 16:43:28
Oder du löschst am Ende des EventHandlers den Delegaten aus der Liste und fügst einen neuen hinzu.


private void button2_Click(object sender, System.EventArgs e)
{
/* mein Code */

this.button2.Click -= new System.EventHandler(this.button2_Click);
this.button2.Click += new System.EventHandler(this.NextMethod);
}


Das selbe muss dann allerdings in jedem entsprechenden Eventhandler gemacht werden, weswegen ich Demirug's Version vorziehen würde.

MfG

beta3
2003-11-17, 20:04:54
damirug, irgendwie mach ich es falsch

nach InitialiceComponent();

geb ich das ein (ne zeile drunter)

button1_Click = new ClickHandler (Function1);

und weiter unten dann der handler

protected void Function1()
{
MessageBox.Show("hallo");
}


beim compiling und debug bekomm ich folgende fehler

beim 1 bei protectec void Function1()
; expected

bei '(' nach MessageBox.Show
Invalid token '(' in class, struct or interface member declaration

beim letzten '}' ganz unten
type or namespace definition of end-of-file expected

kannst du mir bitte sagen, was ich falsch mache