2016-12-14 4 views
1

Ich habe eine winform-Anwendung, wo ich meinen eigenen kleinen Farbwähler geschrieben habe, der nur Systemfarben anzeigt. Es ist im Grunde eine TableLayoutPanel mit einer Reihe von kleineren Panels hinzugefügt, auf die ich nur die Hintergrundfarbe gesetzt.Schließen eines Formulars, das von ShowDialog() geöffnet wurde

Ganz einfach:

enter image description here

Jetzt bin ich Öffnen dieses Formulars mit:

using (frmColourWindow colourPicker = new frmColourWindow (Cursor.Position.X, Cursor.Position.Y, findingPriority)) 
{ 
    colourPicker.ShowDialog(); 
    if (!colourPicker.SelectedColor.IsEmpty) 
    { 
     pnlColor.BackColor = colourPicker._SelectedColor; 
    }      
} 

und Schließen mit durch die DialogResult Einstellung, wenn der Benutzer auf eine der angeklickt Farbfelder.

Das alles funktioniert ziemlich gut, die einzige Sache, die ich nicht richtig verwalten kann, ist das Schließen des Formulars, wenn es den Fokus verliert (z. B. wenn der Benutzer irgendwo anders klickt oder zu tippen beginnt). Ich habe mir die Ereignisse Deactivate, LostFocus und Leave angesehen. Ich kann einfach nicht scheinen, dass diese Ereignisse ausgelöst werden, wenn ich will. Vielleicht vermisse ich etwas Offensichtliches?

+0

Wenn Sie ein Formular mit 'ShowDialog()' öffnen, können Sie dieses Formular nur verwenden, bis es geschlossen wurde. Wenn ich verstehe, was Sie wollen, verwenden Sie 'Show()' anstelle von 'ShowDialog()', dann sollten diese Ereignisse ausgelöst werden. –

+0

Wählen Sie das Panel und klicken Sie auf ApplicationSettings. Drücken Sie F1, wenn Sie weitere Hilfe benötigen. –

+0

@Bojan, wie bekomme ich dann die ausgewählte Farbe von meinem Farbwähler, wenn ich 'Show()' und dann 'Close()' das Formular programmatisch aus dem Farbwähler verwende? Da das kleine Feld auf der Rückseite auf diese Farbe eingestellt werden muss, nachdem das Formular –

Antwort

2

Wie ich in den Kommentaren erwähnt, bei der Verwendung der ShowDialog() Sie nur den Dialog können Sie geöffnet haben und so verliert es nie konzentrieren, so Ereignis wie Deactivate, LostFocus und Leave wird nicht funktionieren.

Sie müssen den Befehl Show() verwenden, um dieses Ereignis zum Schließen des geöffneten Formulars zu verwenden.

Zur Behebung des Problems haben Sie in den Kommentaren zum Zuweisen der Farbe zum Objekt hingewiesen. Sie können wie folgt vorgehen:

Declare öffentliches Eigentum

Color SelectedColor {get; private set; } 

In Ihrer Farbauswahl und wechseln Sie in das Ihr using-Anweisung:

var colourPicker = new frmColourWindow (Cursor.Position.X, Cursor.Position.Y, findingPriority); 
colourPicker.Closed += (o, args) => { pnlColor.BackColor = colourPicker.SelectedColor }; 
colourPicker.Show(); 

Das ist natürlich nur eine von vielen möglichen Lösungen dafür.

+0

funktioniert wie ein Charme! –

+0

Natürlich wird es den Fokus verlieren, wenn er ein anderes Programm aktiviert. –

0

Sie können dies erreichen, indem Sie das Formular mit der Methode Show() anzeigen und dann das Ereignis verwenden.

Verwandte Themen