Ich versuche, diese C++ MFC-Anwendung in eine C# WinForm zu portieren. Es ist ein work in progress. Grundsätzlich möchte ich eine Zeichnung in den groupbox Bereich tun:Verwenden von WinForm Paint-Ereignis in Groupbox
ich einen Lack-Handler dem Formular hinzugefügt, meine Arbeit zu tun:
private void FullColourPaletteForm_Paint(object sender, PaintEventArgs e)
{
// Do painting with e.Graphics
}
Ich war überrascht zu sehen, dass es tat Zeige mein Rendering nicht. Aber dann erkannte ich, dass in einem Winform es nicht groupbox
, sondern ein container
genannt wird. So habe ich den Behälter unsichtbar zu sein und verständlicherweise meinen Rendering (wenn auch nicht ganz richtig) war jetzt visble:
Wie soll ich meine Malerei im Bereich des Behälters tun?
Warum ist das dann? Alles, was ich tat, war hinzuzufügen:
private void groupBox1_Paint(object sender, PaintEventArgs e)
{
base.OnPaint(e);
}
Jetzt ist meine Formen Malerei sichtbar.
Verwenden Sie stattdessen das Paint-Ereignis der GroupBox. –
Danke. Bitte sehen Sie meine aktualisierte Frage. –
Jedes Steuerelement hat eigene Paint-Ereignisse. Wenn das Formular gezeichnet wird (wenn die Sichtbarkeit geändert wird), wird jede Steuermethode "OnPaint" aufgerufen (die am Ende des Malens das Ereignis "Paint" aufruft). Sie versuchen, ein benutzerdefiniertes Steuerelement zum Zeichnen der Palette zu erstellen. Es muss nicht 'GroupBox' sein, stattdessen können Sie' Control' verwenden. Wenn Sie diesen 'GroupBox'-Rahmen behalten möchten, können Sie die 'Paint'-Methode überschreiben und zuerst' base.OnPaint' aufrufen und dann darüber zeichnen. Nicht sicher, ob dies der Fall ist, aber manchmal lohnt es sich, alles selbst zu zeichnen (Sie können 'ControlPaint.DrawBorder' verwenden, um einen Rahmen zu zeichnen). – Sinatr