2016-08-01 14 views
1

Wie im Titel beschrieben, habe ich ein Formular mit einer Datagridview auf der Vorderseite. Die Datagridview ist kleiner als mein Formular auf der Rückseite und ich möchte die Datagridview verschwinden, wenn ich irgendwo anders als die Datagridview klicken.Datagridview soll verschwinden, wenn Sie auf das Formular im Hintergrund klicken

Mein Code sieht wie folgt aus:

this.dataGridView1.Leave += new System.EventHandler(this.focus); 

und die Eventhandler wird wie folgt definiert:

private void focus(object sender, EventArgs e) 
{ 
    if(dataGridView1.Focused == false) 
    { 
     dataGridView1.Visible = false; 
    } 
} 

Mein Problem ist, dass meine Datagridview nur verschwindet, wenn ein neues Ereignis in meiner Form aktiviert wird, aber nicht wenn ich zum Beispiel in ein Textfeld auf meinem Formular klicke.

Kann mir jemand helfen?

+0

Sie möchten, dass Ihr Datagrid unsichtbar wird, wenn es den Fokus verliert? Oder was ist deine Frage? – GuidoG

+0

@GuidoG 12 Ja genau – MaChaToc

Antwort

3

Das Leave Ereignis wird nicht erhöhen, wenn Sie auf Form klicken oder eine ToolStripButton, PictureBox oder irgendein anderes nicht auswählbares Steuerelement.

Wenn Sie ein Verhalten wie ein Dropdown erwarten, können Sie DataGridView in einem ToolStripControl-Host hosten und mit einer ToolStripDropDown anzeigen. Wenn Sie irgendwo außerhalb des DataGridView klicken, verschwindet es. Es wird wie ein Dropdown-Menü funktionieren. Auch kann das Gitter größer sein als Ihre Form:

private void button1_Click(object sender, EventArgs e) 
{ 
    this.dataGridView1.Margin = new Padding(0); 
    var host = new ToolStripControlHost(this.dataGridView1); 
    this.dataGridView1.MinimumSize = new Size(200, 100); 
    host.Padding = new Padding(0); 
    var dropdown = new ToolStripDropDown(); 
    dropdown.Padding = new Padding(0); 
    dropdown.Items.Add(host); 
    dropdown.Show(button1, 0,button1.Height); 
} 

enter image description here

Wichtiger Hinweis: Es ist ein Beispiel dafür. Es ist besser, auf die Entsorgung von Objekten in einer realen Anwendung zu achten. Verwenden Sie zum Beispiel nur eine einzige ToolStripdropDown und entsorgen Sie sie beim Schließen des Formulars.

+0

Ich habe versucht, Ihre Lösung-Anweisung, aber mit Dropdown.Show() Ich habe eine Fehlermeldung mit dem Hinweis: Kann nicht von 'System.Windows.Forms.ToolStripStatusLabel' zu 'System.Windows.Forms.Control' konvertieren. Könnte das Problem sein, dass ich die ganze Sache mit dem Klicken auf ein Etikett probiert habe? – MaChaToc

+0

Es funktionierte, ich brauchte nur ein Steuerelement als Referenzpunkt, zum Beispiel eine Groupbox oder, wie in Ihrem Beispiel, eine Schaltfläche. Mein Fehler war, dass ich ein Label für eine Kontrolle hielt. – MaChaToc

+0

Großartig! Sie können aber auch das Dropdown-Menü anzeigen, ohne ein Referenzsteuerelement zu verwenden. Sehen Sie sich andere Überladungen der 'Show' Methode an. –

0

Sie möchten, dass Ihr dgv auch verschwindet, wenn Sie auf Ihre Textbox klicken? meinst Du das?

private void dataGridView1_Leave(object sender, EventArgs e) 
    { 
     dataGridView1.Visible = false;   
    } 

    private void Form1_Click(object sender, EventArgs e) 
    { 
     dataGridView1.Visible = false; 
    } 
1

Ändern Sie den Ereignishandler zuweisen:

this.dataGridView1.Leave += new System.EventHandler(fokussiert); 

für mich gearbeitet, wenn sie auf einer Textbox Fokussierung

+0

Das 'Leave' wird nicht ausgelöst, wenn Sie' Form', oder ein 'ToolStripButton',' PictureBox' oder ein anderes nicht auswählbares Steuerelement anklicken. –

+0

@JRoller hat nichts für mich geändert. Wo hast du diesen Eventhandler definiert? Weil ich es in meinem Designer definiert habe. – MaChaToc