2010-11-09 32 views
5

Tengo una aplicación WinForm. En el formulario principal hay varios controles, como etiquetas, cuadros de texto, etc.C# usando controles winform en otra clase

Si tengo otra clase, dentro del mismo conjunto, ¿cómo puedo acceder a esos controles?

Por ejemplo, de mi nueva clase, ¿quiero actualizar una etiqueta en Form1?

+1

Por si acaso: asegúrese de hacer esto en el mismo hilo – smirkingman

+0

Primero tendrá que pasar la referencia de Form1 a esa clase ... con dicha referencia puede usar la idea sugerida por otros para exponer la propiedad pública. –

+0

Extendiendo lo que dijo @smirkingman, si va a llamar a estos métodos a través de hilos, necesitará usar Control.Invocar – cordialgerm

Respuesta

7

En la propiedad de la etiqueta (o cualquier control) hacer que la opción "modificadores" a "público"

Ahora se puede acceder a la etiqueta del objeto de la Forma

Form1 f = new Form1() 
f.lblMyLabel.Text = "My Text" 
2

Una forma sería la creación de propiedades públicas en su clase Form1 que exponen a los controles que están tratando de modificar

Por ejemplo, si su etiqueta se llama label1 en el diseñador entonces se podría hacer algo como esto:

public Label MyForm1Label { get { return label1; } } 
1

Además de las soluciones que ya se mencionaron, puede crear algún método público para su Formulario que proporcionará la funcionalidad deseada (podría ser bueno si algún cambio tiene que mostrarse en varios controles; sus otras clases no tienen que recuerde cuál cambiar)

public void SetSomething(int value) 
{ 
    Control1.value = value; 
    Control2.value = value; 
    ... 
} 
3

seleccione el control al que desea acceder desde otra clase/formulario. vaya a su propiedad y establezca el valor de sus modificadores en "interno" (si desea usarlo solo en el mismo ensamblaje).

ahora donde quiera en la misma asamblea que quiera usarlo basta con crear un objeto de esa forma como

myForm objform = new myForm(); 
objform.txtName.Text="any text"; 

entonces se puede demostrar que el uso de la forma objform.show(); o objform.showdialog();

pero creo que esto no solucionará su problema porque lo que siento es que su formulario ya está apareciendo en la pantalla y de otra forma/clase quiere cambiar el valor de la etiqueta/cuadro de texto , así que para esto tendrá que tomar ese objeto actual de forma, de lo contrario, no mostrará ningún cambio en el formulario que se muestra actualmente.

así que creo que el patrón singleton le dará la solución perfecta. simplemente cree una clase y en esa clase cree un objeto estático de esa forma y luego cree una función estática y verifique si el objeto ya está inicializado que no lo inicialice y use existente de lo contrario inicialícelo.

hay un montón de otras soluciones también existe como mediante la creación de propiedad pública, pero que tendrá que usar de referencia del mismo objeto de la actualidad mostrando la forma de ver cambios reflejan de mostrar la actualidad forma