13. februar 2007 - 23:40Der er
8 kommentarer og 2 løsninger
MouseClick MouseEventHandler
Hej alle..
Jeg har oprettet en mouseeventhandler på min form1 som skal gøre noget når jeg klikker på formen. Mit problem er at den kun virker når jeg trykker på selve formen, men den skal også virke når jeg trykker på labels og andre controls.
Min kode: public Form1() { ... this.MouseClick += new MouseEventHandler(searchScreen_MouseClick); } void searchScreen_MouseClick(object sender, MouseEventArgs e) { blabla }
hmm. Det er jo det samme jeg allerede har prøvet, udover jeg ikke har lagt den i initializecomponent (hvilket vel er ligemeget om den ligger i form1).. og du bruger mouseDown..
Den løsning er desværre ikke nok for at få fat i alle kontroller på din form. Den vil fejle hvis du f.eks har ordnet dine kontroller i panels. Følgende rettelse løser problemet:
public partial class Form1 : Form { public Form1() { this.InitializeComponent(); this.InitializeGlobalMouseDown(this); }
private void InitializeGlobalMouseDown(Control control) { control.MouseDown += new MouseEventHandler(this.ControlMouseDown);
foreach (Control subControl in control.Controls) { this.InitializeGlobalMouseDown(subControl); } }
Som det ses kalder metoden rekursivt sig selv for at medtage alle childs for den aktuelle kontrol.
Bemærk at denne løsning kun vil virke for kontroller på formen, så forvent ikke at ControlMouseDown metoden bliver kaldt hvis du klikker på formens caption. At få rejst et event herfra er en anden historie.
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.