Avatar billede ahrensberg Nybegynder
13. februar 2007 - 23:40 Der 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
}

Håber nogen kan hjælpe mig

Tak
Avatar billede ahrensberg Nybegynder
13. februar 2007 - 23:43 #1
For lige at gøre det helt klart: Funktionen skal kaldes ligemeget hvor man trykker på form1
Avatar billede kalp Novice
13. februar 2007 - 23:46 #2
this.MouseDown += new System.WinForms.MouseEventHandler(this.Form_MouseDown);

placer det i "InitializeComponent"

og lav denne Event

private void Form_MouseDown(object sender, System.WinForms.MouseEventArgs e)
{
din kode her
}
Avatar billede kalp Novice
13. februar 2007 - 23:50 #3
winforms skal være til windows.forms
men virker ikke.. hmmm
Avatar billede ahrensberg Nybegynder
13. februar 2007 - 23:53 #4
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..
Avatar billede kalp Novice
14. februar 2007 - 00:03 #5
sorry sorry sorry..
så det selv;)

men lav denne metode


    private void all()
        {
            foreach(Control obj in this.Controls)
            {
                obj.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form_MouseDown);
            }
        }


og kald den her


  public Form1()
        {
            InitializeComponent();
            all();
       
           
        }


så virker det
Avatar billede bulgroz Nybegynder
14. februar 2007 - 10:14 #6
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);
            }
        }

        private void ControlMouseDown(object sender, MouseEventArgs mouseEventArgs)
        {
            MessageBox.Show(string.Format("Mouse Down:\n{0}", sender.ToString()));
        }
Avatar billede bulgroz Nybegynder
14. februar 2007 - 10:17 #7
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.
Avatar billede ahrensberg Nybegynder
14. februar 2007 - 12:00 #8
Det er bare helt perfekt.

Bulgroz:> Jeg har brugt dit forslag,
Qawi':> men takker også for din hjælp!

Bulgroz:> Sender du ikke et svar, så deler jeg pointene mellem jer...
Avatar billede bulgroz Nybegynder
14. februar 2007 - 12:09 #9
....
Avatar billede ahrensberg Nybegynder
14. februar 2007 - 12:16 #10
Takker... :o)
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