2010-11-18 5 views
1

Je travaille sur un programme qui nécessite qu'un utilisateur sélectionne le fichier qu'il souhaite ouvrir.Modification d'une disposition de formulaire en C#

Il existe environ 3 fichiers différents parmi lesquels ils peuvent choisir, et chacun de ces fichiers affecte la disposition des boutons, ainsi que certains de leurs attributs.

Le problème est, au moment où j'ai cette liste énorme avec:

label1.Visible = false; 
label2.Visible = false; 
form.size = etc. 

Chaque fichier affecte environ 16 contrôles différents, de sorte que c'est un total de 48 changements possibles.

Existe-t-il un moyen plus rapide/meilleur d'organiser la mise en page de votre programme?

Merci d'avance.

Cadre: 3,5 Langue: C#

application Windows Forms

Répondre

5

Je suggère de les regrouper dans des panneaux et la visibilité puis basculer sur le panneau à la place.

+0

Excellente idée, j'aurais dû penser à ça .. Je vais marquer c'est réponse, merci. – Nick

2

Si vous créez votre application à l'aide de WPF, vous pouvez utiliser Visual State Manager pour définir des états personnalisés pour la fenêtre et définir la visibilité des contrôles en fonction de l'état. Ou vous pouvez lier la propriété visibility sur les contrôles à une propriété sur ViewModel.

Pour référence future, C# est le langage; vous devez spécifier le framework que vous utilisez pour votre application.

+0

Ajout de l'information, merci pour le pointeur. – Nick

+0

Je voulais dire que vous devez spécifier quelle infrastructure d'application Windows vous utilisez: WPF, Silverlight ou Windows Forms. –

1

Brandon a suggéré de grouper avec des panneaux, ce qui peut être une solution raisonnable si vos 16 contrôles se trouvent dans une zone rectangulaire. Une autre forme de regroupement peut être obtenue en attribuant à un groupe de contrôles des noms raisonnables et en y accédant par leur nom au moment de l'exécution. Je suppose que vous utilisez Windows Forms. Par exemple, au lieu d'avoir 16 lignes de code comme celui-ci

label_1_1.Visible = false; 
label_1_2.Visible = false; 
//... 
label_1_16.Visible = false; 

vous ajoutez cette fonction à votre formulaire

Control FindControl(string name) 
{ 
    foreach (Control c in this.Controls) 
    { 
     if (c.Name == name) 
     { 
       return c; 
     } 
    } 
    return null; 
} 

et l'utiliser de cette façon:

for(int i=1;i<=16++i) 
    ((Label)FindControl("label_1_" + i)).Visible=false; 

(vous devez ajouter une erreur de vérification, bien sûr)

+0

C'est une très bonne idée, je vais les essayer tous les deux pour voir ce que je veux utiliser. Je vous remercie. – Nick

0

Je mettrais chaque mise en page dans son propre contrôle d'espace réservé (les mettre tous comme invisib le dans le balisage) et ajoutez une logique pour afficher celle que vous voulez.

(En supposant que vous parlez de formulaires Web).

Questions connexes