c # - Skjul formular når er andre kontrolfokus

Indlæg af Hanne Mølgaard Plasc

Problem



Dette spørgsmål er relateret til dette mit spørgsmål. Nu har jeg form i min klasse og når bruger klikker på knappen, viser jeg (eller skjul) formularen. Det er ok. Men jeg vil skjule formularen, når jeg flytter med oprindelsesformular eller når jeg klikker et sted i oprindelsesformular. Den nye form ligger bag den oprindelige formular. Jeg prøvede begivenheder som lostfocus og andre, men det hjalp ikke. Så jeg tror jeg har brug for noget trick, der kontrollerer fra min kontrol, hvis der var klik i parrentformular (oprindelsesformular) eller noget andet hack. Jeg ved, det bedste ville være, at jeg lægger kode, men jeg har mange linjer, så jeg tror, ​​at den bedste måde vil være, hvis du hjælper mig generelt og derefter forsøger jeg at applikere til min app.

Bedste reference


Du kan gøre det med en global mus og tastaturkrog. Faktisk er det pakket ind i vel dokumenteret, godt struktureret. NET API over på CodePlex [7] [8]


Gå derovre og download det. Derefter oprette en global musekrog:


    \_mouseListener = new MouseHookListener(new GlobalHooker());
    \_mouseListener.MouseMove += HandleGlobalHookMouseMove;
    \_mouseListener.Start();


Nøglen her er, at du vil modtage MouseMove-begivenheden. Nogen gang musen bevæger sig hvor som helst på skrivebordet, ikke bare inden for rammerne af dit vindue.


 private void HandleAppHookMouseMove(object sender, MouseEventArgs e)
 {

        if (this.Bounds.Contains(e.Location))
        {
              HandleEnter();
        }
        else
        {
              HandleLeave();
        }          
  }


Du kan også opsætte en til MouseClick. Kombinationen af ​​de to giver dig mulighed for at bestemme, hvornår musen bevæger sig over din oprindelsesformular, eller musen klikkes, når den er over den. I modsætning til LostFocus og andre begivenheder, du forsøgte, er fokus ikke relevant.

Andre referencer 1


Er der underhjælp?


public partial class Form1 : Form
{
    Form f2 = new Form2();
    public Form1()
    {
        InitializeComponent();
        f2.Show();
    }

    private void Form1\_MouseMove(object sender, MouseEventArgs e)
    {
        if (this.ClientRectangle.Contains(e.Location) && f2.Visible) { f2.Hide(); }
    }

    private void button1\_Click(object sender, EventArgs e)
    {
        f2.Visible = !f2.Visible ? true : false;
    }
}