2009-01-04 11 views
20

J'ai créé un contrôle utilisateur C# avec une zone de texte et une zone de texte enrichi.Comment accéder aux propriétés d'un contrôle utilisateur en C#

Comment puis-je accéder aux propriétés de la zone richtext depuis l'extérieur de la commande usercontrol? Par exemple ... si je le mets sous une forme, comment puis-je utiliser la propriété Texte de la zone richtext ???

grâce

Répondre

32

est de manière Cleanest exposer les propriétés souhaitées en tant que propriétés de votre usercontrol, par exemple:

class MyUserControl 
{ 
    // expose the Text of the richtext control (read-only) 
    public string TextOfRichTextBox 
    { 
    get { return richTextBox.Text; } 
    } 
    // expose the Checked Property of a checkbox (read/write) 
    public bool CheckBoxProperty 
    { 
    get { return checkBox.Checked; } 
    set { checkBox.Checked = value; } 
    } 


    //... 
} 

De cette façon, vous pouvez contrôler les propriétés que vous souhaitez exposer et si elles doivent être en lecture/écriture ou en lecture seulement. (bien sûr, vous devriez utiliser de meilleurs noms pour les propriétés, en fonction de leur signification).

Un autre avantage de cette approche est qu'elle masque l'implémentation interne de votre contrôle utilisateur. Si vous souhaitez échanger votre contrôle richtext avec un contrôle différent, vous ne casserez pas les appelants/utilisateurs de votre contrôle.

+0

Dans, public bool CheckBoxProperty { get {return checkBox.Checked; } get {checkBox.Checked = valeur; } } obtenir devrait être un ensemble –

+0

Merci Jean !. Je l'ai réparé. – M4N

+0

@ M4N savez-vous comment je peux accéder à Custom AttachedProperties du UserControl? J'ai créé un ImageButton avec deux ImageSources (normal & pressé) et j'ai un UserControl avec un ImageButton. Comment puis-je accéder à cette propriété? '' Dans la page qui implémente le UserControl je veux changer le SrcNormal de mon ImgBtn. –

3

Changer le modificateur d'accès ("Modifiers") du RichTextBox dans la grille de la propriété au public.

+2

Ce n'est probablement pas la meilleure idée car cela permet au consommateur du contrôle d'avoir un contrôle total sur la RichTextBox. Vous devriez seulement exposer les propriétés que le consommateur devrait pouvoir changer. –

3

Ajouter une propriété à l'usercontrol comme celui-ci

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

Vous devez faire une propriété publique pour le richtextbox, ou d'exposer une autre propriété qui fait le travail de la définition du texte RichTextbox comme:

private RichTextBox rtb; 

public string RichTextBoxText 
{ 
    get 
    { 
     return rtb.Text; 
    } 
    set 
    { 
     rtb.Text = value; 
    } 
} 
2

J'ai récemment rencontré des problèmes avec une classe personnalisée:

Un contrôle utilisateur avait une propriété publique qui était d'un type de classe personnalisée. Le concepteur essaye par défaut de lui attribuer une certaine valeur, donc dans le code du concepteur, la ligne userControlThing.CustomClassProperty = null était automatiquement ajoutée.

L'objectif était de pouvoir fournir le contrôle utilisateur avec une classe personnalisée à tout moment pendant l'exécution du programme (pour modifier les valeurs visibles par l'utilisateur). Parce que la partie set {} n'a pas vérifié les valeurs NULL, diverses erreurs se sont produites.

La solution consistait à remplacer la propriété par une propriété privée et à utiliser deux méthodes publiques pour définir et obtenir la valeur. Le concepteur va essayer d'assigner automatiquement les propriétés, mais laisse les méthodes seules.