2009-08-01 7 views
1

Ich verwende den GUI-Formular-Generator in C#. Ich habe einen TransparencyKey-Satz und die BackGround-Farbe des gesamten Formulars ist auf diesen Transparenz-Schlüssel eingestellt, so dass der Hintergrund des Formulars unsichtbar erscheint. Ich habe auch ein Login-Panel, das zuerst erscheint und nachdem sich der Benutzer anmeldet, verschwindet es und die anderen Panels werden sichtbar. Das alles funktioniert, außer wenn ich versuche, eines der Panels zu überlappen. Send to Back oder Bring to Front machen keinen Unterschied. Wenn sich sogar eine der Platten überlappt, verschwinden beide überlappenden Platten. Was könnte falsch sein?Überlappende Panels in C#

Prost Grant-

+2

Ich schlage vor, Sie senden den kürzest möglichen Beispielcode, der das Problem verursacht, wird dies in viel mehr Chance einer Antwort führen ... – ShuggyCoUk

Antwort

1

Wenn dieser WinForms ist, gibt es kein Konzept überhaupt eine Z-Order. Jedes Panel fordert das Elternformular auf, seinen Hintergrund zu malen. Aus diesem Grund funktioniert WinForms Transparenz selten wie erwartet.

Nachdem ich das gesagt habe, sehe ich nicht, warum die Panels komplett verschwinden würden, wenn es Überschneidungen gibt. Ich habe diese Art von Dingen in der Vergangenheit implementiert und nie dieses Verhalten gesehen. Können Sie das in einem sehr kleinen Beispielprojekt neu erstellen und den Code veröffentlichen?

+0

Ich sehe, was Sie über z-Reihenfolge meinen. Es ist wirklich nicht nötig, Ihnen den Code zu zeigen. Wenn Sie einfach ein Formular mit einem Transparenzschlüssel erstellen (und die Hintergrundfarbe für diesen Transparenzschlüssel festlegen). Wenn Sie versuchen, ein Panel darüber zu setzen, verschwindet es. Ohne dass ich jemals einen Schlüssel eingegeben hätte. Ich verstehe es nicht. Am Ende schrieb ich den Code, der das Panel zur Laufzeit erstellt, und positioniere es auf der Basis des aktuellen Formats. Aus irgendeinem Grund funktioniert das, aber das Erstellen mit dem GUI-Editor funktioniert nicht. Danke, dass du versucht hast zu helfen. Grant- – cozmokramer8

5

Nicht sicher, ob das, was ich sagen werde, für das, was du tust, zutrifft. Ich habe heute versucht, etwas ähnliches mit Panels in meiner Windows-Form zu tun. Ich hatte zwei Panels, deren Sichtbarkeit ich anhand eines datengebundenen Controls ändern wollte. PanelX wäre sichtbar, während PanelY unsichtbar wäre. Nun, ich bekam ein Problem ... PanelX wäre sichtbar und PanelY wäre unsichtbar. Aber wenn ich die Formulareingaben ändere, wo PanelY sichtbar sein sollte und PanelX unsichtbar sein sollte, waren sie beide unsichtbar. Ich konnte PanelY nicht sichtbar machen, egal was ich tat.

Nun, die Lösung war dies. Ich hatte PanelY in PanelX platziert (ohne zu merken, dass ich das tat). Was ich wollte, war, PanelX und PanelY beide auf dem Hauptformular Container zu sein. Aber wie ich schon sagte, war PanelY im Container von PanelX ... also, wenn PanelX unsichtbar war und PanelY sichtbar sein sollte, war PanelY auch unsichtbar, weil sein Container (PanelX) unsichtbar war.

So lange Geschichte kurz, stellen Sie sicher, dass Ihre Panel's in den richtigen Behälter sind.

+0

Ich weiß, das ist alt, aber ich wollte kommentieren und sagen, dass ich genau die gleiche Sache gemacht habe. Die einfachste Lösung, die ich gefunden habe, war, ein Panel an der Stelle zu platzieren, an der sie alle starten sollen (vorausgesetzt, sie sind alle überlappend), dann kopiere einfach den Speicherort für den Rest in ihre Eigenschaften (oder setze es programmgesteuert, wenn das besser passt) . –