Avatar billede iblarsen Praktikant
22. december 2004 - 07:47 Der er 9 kommentarer og
1 løsning

Form - UserControl - EventHandler

Jeg har en windowsform med et antal usercontrol's på. På disse usercontrol's findes der en række knapper. Hvordan kan jeg lave en EventHandler på formen, som kan fange ClickEventet fra disse knapper.
Avatar billede ranglen Nybegynder
22. december 2004 - 09:10 #1
Måske..

// hver knaps identifikation
btnKnap1.Tag = 1;
btnKnap2.Tag = 2;
btnKnap3.Tag = 3;

// og så lade samme handler håndtere alle knapper
btnKnap1.Click += new System.EventHandler(btnAlle_Click);
btnKnap2.Click += new System.EventHandler(btnAlle_Click);
btnKnap3.Click += new System.EventHandler(btnAlle_Click);

void btnAlle_Click(object sender, System.EventArgs e)
{
  Button btnPushed = (Button)sender;
  int tag = (int)btnPushed.Tag;

  // tag => id på knap der blev trykket på
}
Avatar billede iblarsen Praktikant
22. december 2004 - 13:48 #2
Det dutter ikke. Man kan ikke se knappen fra usercontrollen i formen
Avatar billede shah_khan Nybegynder
23. december 2004 - 18:48 #3
du kan implementere OnClick funktionen i selve formen.
"protected override OnClick(EventArgs e)" og det er også en god ide at kalde base klassens OnClick funktion ved at skrive "base.OnClick (e)" inde i funktionen.
Avatar billede Lasse Novice
23. december 2004 - 18:55 #4
Du har flere muligheder. Den mest lette jeg lige kan komme paa ville vaere foelgende:

// hver knaps identifikation
btnKnap1.Tag = 1;
btnKnap2.Tag = 2;
btnKnap3.Tag = 3;

// og så lade samme handler håndtere alle knapper
btnKnap1.Click += new System.EventHandler(btnAlle_Click);
btnKnap2.Click += new System.EventHandler(btnAlle_Click);
btnKnap3.Click += new System.EventHandler(btnAlle_Click);

void btnAlle_Click(object sender, System.EventArgs e)
{
  this.OnClick();
}

I din form, fanger du saa usercontrollens click event.

En anden maade der maaske vil vaere lidt mere logisk naeste gang du kigger paa koden kunne vaere foelgende:

public event System.EventHandler ButtonsClick;

Lav da en funktion:

protected virtual void OnButtonsClick(System.Windows.Forms.Button b)
{
  if(ButtonsClick != null) ButtonsClick(b, new System.EventArgs());
}

Og tilsidst...:

void btnAlle_Click(object sender, System.EventArgs e)
{
  OnButtonsClick(sender as System.Windows.Forms.Button);
}
Avatar billede iblarsen Praktikant
24. december 2004 - 05:56 #5
Løsning er fundet. Ved hjælp af delegates og public event på usercontrol siden.
Avatar billede Lasse Novice
27. december 2004 - 18:23 #6
Ok, er der nogen af de svar som du har faaet du vil give point, eller tager du dem selv (saa vi kan lukke spg.)?
Avatar billede iblarsen Praktikant
04. januar 2005 - 07:11 #7
Jeg lukker
Avatar billede Lasse Novice
04. januar 2005 - 17:13 #8
det er saa dejligt at hjaelpe folk naar de ikke vaerdsaetter det...
Avatar billede iblarsen Praktikant
04. januar 2005 - 19:46 #9
Det er skam ikke fordi jeg ikke værdsætter hjælpen. Men de forslag som kom, var ikke det jeg havde brug for.
Avatar billede Lasse Novice
05. januar 2005 - 01:56 #10
ok, men saa maa det vaere fordi du ikke laeser svarene :-( Din loesning er lige praecis det jeg foreslaar ca 11 timer forinden (den sidste del af svaret)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester