2009-08-01 5 views
1

J'utilise le générateur de formulaires GUI en C#. J'ai un ensemble TransparencyKey et la couleur backGround du formulaire entier est définie sur cette clé de transparence afin que l'arrière-plan du formulaire semble invisible. J'ai aussi un panneau de connexion qui apparaît d'abord et après que l'utilisateur se connecte il disparaît et les autres panneaux deviennent visibles. Tout cela fonctionne sauf lorsque je tente de chevaucher l'un des panneaux. Envoyer vers l'arrière ou apporter à l'avant ne fait aucune différence. Si même l'un des panneaux se chevauchent un peu, ces deux panneaux qui se chevauchent disparaissent? Quel pourrait être le problème?Panneaux superposés en C#

Vive Grant

+2

Je vous suggère de poster l'exemple de code le plus court possible qui crée le problème, cela aura beaucoup plus de chance d'obtenir une réponse ... – ShuggyCoUk

Répondre

1

Si cela est WinForms, il n'y a pas de concept du tout d'un Z-Ordre. Chaque panel demandera au formulaire parent de peindre son arrière-plan. Pour cette raison, la transparence de WinForms fonctionne rarement comme prévu. Cela dit, je ne vois pas pourquoi les panneaux disparaîtraient complètement s'il y avait un chevauchement. J'ai mis en place ce genre de chose dans le passé et je n'ai jamais vu ce comportement. Pouvez-vous recréer ceci dans un très petit exemple de projet et poster le code?

+0

Je vois ce que vous voulez dire à propos de la commande z. Il n'y a vraiment pas besoin de vous montrer le code. Si vous deviez simplement créer un formulaire avec une clé de transparence (et la couleur d'arrière-plan définie sur cette clé de transparence). Si vous essayez de mettre un panneau sur le dessus, il disparaît. Sans même jamais taper une clé. Je ne comprends pas. Ce que j'ai fini par faire était d'écrire le code qui crée le panneau à l'exécution, et le positionne en fonction de l'endroit où le formulaire est actuellement situé. Pour une raison quelconque, cela fonctionne, mais pas avec l'éditeur gui. Merci d'avoir essayé d'aider. Grant- – cozmokramer8

5

Je ne sais pas si ce que je vais dire s'appliquera à ce que vous faites. J'essayais de faire quelque chose de similaire aujourd'hui avec des panneaux sous ma forme de fenêtres. J'avais deux panneaux que je voulais faire basculer leur visibilité en fonction d'un contrôle de base de données. PanelX serait visible alors que PanelY était invisible. Eh bien j'avais un problème ... PanelX serait visible et PanelY serait invisible. Mais si je changeais les entrées du formulaire pour que PanelY soit visible et que PanelX soit invisible, elles étaient toutes les deux invisibles. Je n'ai pas pu obtenir PanelY pour être visible, peu importe ce que j'ai fait.

Eh bien, la solution était la suivante. J'ai placé PanelY à l'intérieur de PanelX (sans réaliser que je l'ai fait bien sûr). Ce que je voulais, c'était PanelX et PanelY à la fois sur le conteneur de formulaire principal. Mais comme je l'ai dit, PanelY était dans le conteneur de PanelX ... donc quand PanelX était invisible et que PanelY devait être visible, PanelY était également invisible car son conteneur (PanelX) était invisible.

En bref, assurez-vous que vos panneaux sont dans le bon conteneur.

+0

Je sais que c'est vieux, mais je voulais commenter et dire que je viens de faire exactement la même chose. La solution la plus simple que j'ai trouvée consistait à placer un panneau où vous vouliez tous les démarrer (en supposant qu'ils se chevauchent), puis copier/coller l'emplacement du reste dans leurs propriétés (ou le définir par programme si cela correspond mieux à vos besoins) . –