web-dev-qa-db-fra.com

Winforms - Comment afficher/masquer des éléments dans Designer?

J'essaye de faire une application de plusieurs pages en utilisant winforms. J'ai décidé d'utiliser plusieurs panneaux - chaque panneau représentant une page différente, je peux donc basculer entre eux lorsque j'ai besoin d'afficher un contenu différent.

Mon problème concerne l'empilement de panneaux dans la vue concepteur. Lorsque j'ai plus de 2 panneaux en plein écran, ils s'empilent les uns sur les autres et je ne peux pas voir celui que j'ai créé précédemment. Y a-t-il une solution à cela ? Le changement de visibilité n'affecte pas la vue des concepteurs. Pensez-y comme une option semblable à celle de Photoshop pour afficher/masquer les calques. J'utilise Visual C # 2010 Express.

24
Kamil N.

Plusieurs options ici:

  1. Utilisez la vue Document Outline (View --> Other Windows --> Document Outline) pour sélectionner le panneau qui vous intéresse. Vous pouvez cliquer dessus avec le bouton droit de la souris et choisir Bring to Front pour le mettre devant tout le reste.
  2. Bien que cela ne soit probablement pas pertinent par rapport à ce que vous faites, vous pouvez envisager d'utiliser une variable TabControl, avec laquelle vous pouvez jouer de façon visuelle lors de la conception. Ce n'est qu'une solution raisonnable si vous voulez que vos utilisateurs puissent modifier manuellement le panneau qu'ils consultent.
  3. Pensez à déplacer vos panneaux dans des classes personnalisées UserControl et travaillez-les séparément. Si le contenu et la logique de ces panneaux sont relativement autonomes, vous souhaiterez peut-être le faire de toute façon, simplement pour mieux restructurer votre code.

Addendum: Vous pouvez également utiliser un hack qui rend les onglets d'une TabControl invisibles pour l'utilisateur. Mettez une TabControl sur votre formulaire et, au moment de l'exécution, définissez la ItemSize height sur 1. Cela empêche (presque) l'utilisateur de modifier les onglets lui-même, mais vous permet néanmoins de modifier l'onglet visible dans le concepteur.

myTabControl.ItemSize = new Size(myTabControl.ItemSize.Width, 1);

Notez que j'ai appelé cela un hack pour une raison: TabControls n'était pas destiné à être utilisé de cette façon. C'est quelque chose qui semble fonctionner, mais comme tout piratage informatique, il peut s'effondrer à tout moment, vous ne devriez donc le faire qu'en dernier recours (et ne me blâmez pas si cela provoque des maux de tête plus tard ...). En bref, je ne pas recommande ce hack, je ne l’offre que comme possibilité.

27
ean5533

J'utilise "Mettre au premier plan" ou "Envoyer à la fin" sous Format> Ordre pour gérer ce genre de scénario, mais vous avez raison, ça craint que la visibilité ne soit que du temps d'exécution (AFAIK).

À votre santé

4
Luc Morin

Je ne suis pas sûr de la bonne façon de faire cela, mais ce que je fais moi-même, c'est que les commandes sont très petites et que, plus tard, le programme est lancé et que je change la taille et l'emplacement des fichiers au début.

1
Saeid Yazdani

Essayez this.richTextBox1.Visible = false; dans votre Form1.cs (en supposant que vous essayez de masquer une zone de texte enrichi avec le nom par défaut "richTextBox1")

0
William

Vous souhaitez donc pouvoir afficher/masquer votre panneau dans la vue VS Designer (pas seulement lorsque l'exécutable est en cours d'exécution) correct?

Est-ce que quelque chose comme this help?

Dans le cas contraire, vous pourriez peut-être essayer de créer des contrôles utilisateur personnalisés au lieu de panneaux vous permettant de définir les propriétés de visibilité à votre guise ou d'utiliser WPF qui fournit ce type de fonctionnalité. Cliquez sur ici pour plus d'informations.

0
Ami Schreiber

Une approche que j'ai utilisée dans cette situation consiste à utiliser la fenêtre Explorateur de documents pour afficher le panneau sur lequel je travaille.

0
RQDQ

Si cela vous convient, envisagez d'utiliser un contrôle TabControl et de placer chacun des contrôles Panel dans un onglet différent. Vous pouvez ensuite masquer et afficher la page correcte en basculant entre les onglets ou en supprimant et en ajoutant par programme le programme approprié au contrôle.

Vous pouvez également envisager d’utiliser deux fenêtres différentes avec des dispositions différentes et d’afficher une commutation entre elles.

Si vous utilisez plus que quelques panneaux, vous pouvez envisager de placer chacun d'eux dans un contrôle séparé, puis d'utiliser simplement les contrôles du formulaire de l'application (c'est-à-dire, ajoutez-les par programme si nécessaire). De cette façon, vous pouvez concevoir chacun des contrôles (donc chacun des contenus de Panel) séparément, sans aucun autre Panels visible.

Chacune de ces suggestions rendrait certaines parties de l'interface utilisateur plus séparées, ce qui peut être souhaité si chacune des présentations que vous avez est associée à une partie distincte de l'application. L'utilisation de ces suggestions peut également faciliter la gestion du deisgner.

0
Lukasz M