web-dev-qa-db-fra.com

Contrôle utilisateur - Propriétés personnalisées

J'ai développé un contrôle utilisateur dans Visual Studio (WinForms C #) et j'ai une question.

J'ai besoin que l'utilisateur de mon contrôle utilisateur puisse modifier certaines valeurs de chaîne et je voudrais qu'il puisse ajouter le contrôle utilisateur à son formulaire et cliquer dessus pour faire apparaître le volet Propriétés où les propriétés personnalisées de mon contrôle utilisateur seront affiché.

Comment puis-je avoir mes propres propriétés personnalisées pour mon contrôle utilisateur? Par exemple:

Mon contrôle utilisateur contient un TextBox, et je voudrais que l'utilisateur puisse modifier la valeur de ce TextBox via une propriété nommée "Text" ou "Value" dans les propriétés au moment du design.

69
jay_t55

Vous faites cela via des attributs sur les propriétés, comme ceci:

[Description("Test text displayed in the textbox"),Category("Data")] 
public string Text {
  get { return myInnerTextBox.Text; }
  set { myInnerTextBox.Text = value; }
}

La catégorie est l'en-tête sous lequel la propriété apparaîtra dans la zone Propriétés de Visual Studio. Voici une référence MSDN plus complète , y compris une liste de catégories.

102
Nick Craver

C'est très simple, il suffit d'ajouter une propriété:

public string Value {
  get { return textBox1.Text; }
  set { textBox1.Text = value; }
}

L'utilisation de la propriété Text est un peu plus délicate, la classe UserControl cache intentionnellement it. Vous devrez remplacer les attributs pour le remettre en état de fonctionnement:

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always), Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text {
  get { return textBox1.Text; }
  set { textBox1.Text = value; }
}
41
Hans Passant

Ajoutez simplement des propriétés publiques au contrôle utilisateur.

Vous pouvez ajouter des attributs [Category("MyCategory")] et [Description("A property that controls the wossname")] pour le rendre plus agréable, mais tant qu'il s'agit d'une propriété public, elle devrait apparaître dans le panneau de propriétés.

6
Jason Williams