2010-12-08 34 views
3

Pourriez-vous me dire s'il est possible d'ajouter un élément à un contrôle Microsoft WinForms? Par exemple: Supposons que vous ayez une application qui a plusieurs utilisateurs, chacun ayant ses propres "permissions", qui sont représentées simplement par les chaînes "1", "2", "3", etc. Vous aussi avoir plusieurs boutons sur votre application, qui devrait être activé/désactivé selon le niveau d'autorisation de l'utilisateur actuel.Ajouter des éléments au contrôle Microsoft WinForm

Serait-il possible d'ajouter un "String" au contrôle "Button", ce qui pourrait indiquer quel niveau d'autorisation ce bouton représente.

La raison pour laquelle cela est utile, c'est parce que je pourrais boucler tous mes boutons et les désactiver si le niveau d'autorisation de l'utilisateur actuel n'est pas assez élevé.

J'espère que cela a du sens.

Merci.

+2

L'interface IExtenderProvider était destinée à cet effet. –

Répondre

4

Il existe une propriété Tag sur les contrôles WinForms que vous pouvez utiliser pour stocker une référence à des informations connexes. Il est de type object, donc il peut stocker n'importe quoi. (msdn reference)

myButton.Tag = "1"; 

Si vous souhaitez stocker plus d'une chose, puis créer une classe pour elle:

class UserTag 
{ 
    public string Permission {get;set;} 
    public string Name {get;set;} 
} 

.... 
myButton.Tag = new UserTag { Permission="1", Name="Alice" }; 
.... 
// Use like this: ((UserTag)myButton.Tag).Permission 
+0

Ça va marcher. Merci. Je vais ajouter ceci comme réponse dans quelques minutes. – Eric

1

Maintenir et stockage logique derrière l'interface utilisateur est pas une solution appropriée, il rend les choses plus difficiles que votre projets grandit, stocker vos logiques dans les structures de données et rendre l'interface utilisateur compatible et appropriée en utilisant les données. Quoi qu'il en soit, la solution à votre problème est à la fois IExtenderProvider dit par Hans et Matt's Answer.

---- ---- EDIT

  //this is just a simple sample! :D 
     Dictionary<string, int[]> CtrlType = new Dictionary<string, int[]>(); 
     CtrlType.Add(button1.Name, new int[] { 2, 3 }); 
     //add another controls status or attributes for user customizing 
     //. 
     //. 
     //. 

     //somewhere in your form UI Customization for users 
     button1.Enabled = CtrlType[button1.Name].Contains(UserID) ? true : false; 
     //handle another controls attributes 
+0

Que voulez-vous dire "dans les structures de données"? J'ai ma logique dans un fichier/classe séparé, et je passe dans le formulaire et le manipule à partir de là. Je sais que je ne fais probablement pas les choses de la bonne manière, alors j'apprécierais tout aperçu/conseils de quelqu'un d'expérimenté. – Eric

+0

edited.8moretogo –