2009-10-26 9 views
1

J'ai écrit un contrôle personnalisé qui imite l'apparence d'un en-tête de table. Les colonnes qu'il dessine sont données par une collection d'objets avec une propriété Text string et une propriété Width int. Les deux ont Browsable, Category, DefaultValue et Description attributs ajoutés. Dans le concepteur, la collection est modifiable et l'utilisateur peut définir le texte et la largeur comme ils le feraient pour un contrôle, et les attributs sont honorés comme je l'espérais. Cependant, l'utilisateur ne peut pas modifier le nom de la variable; le code généré ressemble à ceci:Comment modifier le nom de variable d'un objet dans le concepteur?

HeaderMimicColumn headerMimicColumn1 = new HeaderMimicColumn(); 
HeaderMimicColumn headerMimicColumn2 = new HeaderMimicColumn(); 
HeaderMimicColumn headerMimicColumn3 = new HeaderMimicColumn(); 
... 

Est-il possible de faire en sorte que l'utilisateur peut spécifier les noms des variables utilisées pour les colonnes, dans le concepteur? Si c'est le cas, comment?

EDIT: Pour être clair, HeaderMimicColumn ne dérive pas de System.Windows.Forms.Control, c'est juste une classe ordinaire avec ces deux propriétés et une paire d'événements qui se déclenchent quand ils changent.

Je devrais probablement également expliquer que la collection a son DesignerSerializationVisibility mis à Contents.

Répondre

2

Lorsque des objets non-Component font partie d'une collection qui est conservée via le mécanisme DesignerSerializationVisibility.Contents, chaque objet de cette collection pas d'identité distincte. C'est simplement une partie de la collection parentale. Par conséquent, vous ne pouvez pas définir leurs noms, car ils n'existent littéralement pas en tant qu'objets distincts.

Si vous voulez que votre HeaderMimicColumn pour faire partie de votre collection et adressables séparément (comme des colonnes dans un ListView), vous aurez au moins les tirer de System.ComponentModel.Component. Et puis faire face aux autres problèmes que cela apportera :)

+0

Super, merci. Pour référence, pour obtenir le comportement que je voulais, j'avais besoin d'ajouter [DesignTimeVisible (false)] et [ToolboxItem (false)] à la classe aussi bien. – Simon

0

L'utilisateur doit déjà être en mesure de le faire en procédant comme suit

  1. Hit F4 dans le concepteur (fait apparaître la fenêtre des propriétés)
  2. Sélectionnez headerMimicColumn1 dans la liste déroulante combobox
  3. Changer le nom champ
+0

les colonnes de l'en-tête d'en-tête n'apparaissent pas dans la liste déroulante - peut-être parce qu'ils ne dérivent pas de System.Windows.Forms.Control? – Simon

Questions connexes