2009-01-04 19 views

Respuesta

32

manera más limpia es exponer las propiedades deseadas como las propiedades de su control de usuario, por ejemplo:

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 esta manera se puede controlar qué propiedades desea exponer y si deben ser de lectura/escritura o lectura solamente. (por supuesto, debería usar mejores nombres para las propiedades, dependiendo de su significado).

Otra ventaja de este enfoque es que oculta la implementación interna de su control de usuario. Si alguna vez desea intercambiar su control richtext con uno diferente, no romperá las llamadas/usuarios de su control.

+0

En, bool público CheckBoxProperty { get {return checkBox.Checked; } get {checkBox.Checked = value; } } obtener debe ser un conjunto –

+0

Gracias Jean !. Arreglado. – M4N

+0

@ M4N ¿sabe cómo puedo acceder a AttachedProperties personalizadas de UserControl? Creé un ImageButton con dos ImageSources (normal y presionado) y tengo un UserControl con un ImageButton. ¿Cómo puedo acceder a esta propiedad? '' En la página que implementa el UserControl deseo cambiar el SrcNormal de mi ImgBtn. –

3

Cambiar el modificador de acceso ("modificadores") de la RichTextBox en la rejilla de propiedades a lo público.

+2

Esta no es probablemente la mejor idea, ya que permite al consumidor del control tener control total sobre el RichTextBox. Solo debe exponer las propiedades que el consumidor debería poder cambiar. –

3

Añadir un alojamiento a la usercontrol como esto

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

Es necesario hacer una propiedad pública para el RichTextBox, o exponer alguna otra propiedad que hace el trabajo de fijar el texto RichTextBox como:

private RichTextBox rtb; 

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

recientemente tuve algunos problemas que hacen esto con una clase personalizada:

un control de usuario tenido una propiedad pública que era de un tipo de clase personalizada. El diseñador, de forma predeterminada, intenta asignarle algún valor, por lo que en el código del diseñador, la línea userControlThing.CustomClassProperty = null se agregó automáticamente.

La intención era poder proporcionar al usuario control con una clase personalizada en cualquier momento mientras se ejecuta el programa (para cambiar los valores visibles para el usuario). Debido a que la parte set {} no verificó los valores nulos, varios errores fueron apareciendo.

La solución fue cambiar la propiedad a una privada, y utilizar dos métodos públicos para establecer y obtener el valor. El diseñador intentará asignar propiedades automáticamente, pero deja los métodos solo.

Cuestiones relacionadas