C# Label.BringToFront funktioniert nicht?

3 Antworten

WinForms hat einige Schwächen im Bezug auf das, was Du da versuchst, da ist WPF viel einfacher. Deinen anderen Fragen nach zu urteilen ist WPF allgemein die bessere Wahl, setzt aber voraus, dass Du dich mit MVVM auseinander setzt.

Aber wegen deiner Frage:

Am einfachsten ist es, ein Control nach vorne zu holen, oder nach hinten zu verschieben, wenn die Bereiche, die Du dabei veränderst "nebeneinander" in dem selben Parent liegen.
Wenn Du z.B. mehrere Bilder hast, die Du immer austauschen möchtest, indem Du eins nach vorne holst, dann solltest Du diese Bilder in das selbe Panel legen.

Wenn Du aber z.B. zwei Panels nebeneinander hast, eins davon ist größer als das Andere und verdeckt es daher, dann kannst Du den Inhalt des Kleineren nicht nach vorne holen. Du müsstest das kleinere Panel als Ganzes nach vorne holen, allerdings würdest Du dabei alle Inhalte nach vorne holen und mehr verdecken, als Du eigentlich möchtest.
Echte Transparenz wird von WinForms-Controls leider nicht unterstützt.

Es gibt einen Weg, sowas ähnliches wie "echte Transparenz" zu erreichen, allerdings ist das sehr komplex und ich habe auch den Code dazu nicht mehr.
In meinem Fall musste ich über viele Controls hinweg schreiben, dabei habe ich im OnPaint nicht einfach nur Linien gezogen (dazwischen wäre der Hintergrund nicht sichtbar gewesen), sondern den sichtbaren Bereich komplett entfernt und dann den Hintergrund entsprechend zur Textfarbe gesetzt.
Bei Text hat das funktioniert, ob das bei komplexen Controls funktioniert ...

Auf jeden Fall ist das der falscheste Weg, den Du wählen kannst :D
WPF unterstützt echte Transparenz, das macht einiges viel einfacher.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler