Ich habe ein Steuerelement, das mehrere C# -Bedienelemente in meiner GUI überlagern kann. Diese Steuerung verfügt über einen halbtransparenten Hintergrund, um ‚grau-out‘ Teile der GUI und die Klasse sieht some wie folgt aus:C# Winforms: Aktualisieren eines Teils einer GUI (enthält 1 oder mehr Steuerelemente)
public greyOutControl: UserControl
{
// Usual stuff here
protected overide OnPaint()
{
paintBackround();
base.OnPaint();
}
}
Derzeit ist die Steuerung manchmal in einer Schleife gefangen wird und immer wieder neu zieht die Hintergrund, wodurch die halbtransparente Farbe immer weniger transparent erscheint.
Meine Idee, dies zu bekämpfen, ist die folgende (in groben Zügen):
1) Bestimmen Sie, was steuert der greyOutControl oben ist von 2) ruft Refresh() auf diesen Kontrollen die Anzeige 3) zu aktualisieren, zeichne weiter das greyOutControl.
Meine Frage ist: Wie kann ich feststellen, welche Steuerelemente das greyOutControl überlappt? Oder gibt es eine Möglichkeit, nur den Teil der GUI zu aktualisieren, den greyOutControl abdeckt?
Das Problem mit dem Aufruf von Invalidate() ist, dass nicht garantiert werden kann, dass Invalidate sofort aufgerufen wird, sondern die Dokumentation gibt an, dass es zum nächsten günstigen Zeitpunkt aufgerufen wird. Innerhalb der OnPaint() - Funktion ist es wichtig, dass der Hintergrund vollständig gerendert wird, bevor Sie versuchen, das halbtransparente Overlay hinzuzufügen. Daher ist Refresh() bevorzugt. –