2009-04-04 14 views
7

En el archivo form.cs tengo dos botones, una nota y un temporizador. Mi pregunta es: ¿Cómo accedo al temporizador o la nota desde otro archivo cs?Cómo acceder a objetos de formulario desde otro archivo cs en C#

He tratado de hacer que los objetos sean públicos, pero no funcionó, por favor dame una fuente o un proyecto, para que pueda ver dónde me equivoco.

Gracias!

+0

es que otros fichero cs en el mismo proyecto? –

Respuesta

15

Seleccione su botón en el diseñador, vaya a sus propiedades y cambie la propiedad "Modificadores" de Privado a Público.

A continuación, puede tener acceso a ella de otra clase, algo como esto:

public static class Test 
{ 
    public static void DisalbeMyButton() 
    { 
     var form = Form.ActiveForm as Form1; 

     if (form != null) 
     { 
      form.MyButton.Enabled = false; 
     } 
    } 
} 

Nota: no es solo un ejemplo y sin duda un patrón para un buen diseño :-)

+1

throw new StackOverflowException(); ;) –

+0

http://pastebin.com/m183c1bcf Se arroja un error, he marcado donde se produce el error. No funciona. –

+0

Ya editó su respuesta, ya lo intenté. Cuando trato de escribir "Form1.MyButton", no lo reconoce. –

6

Me preocupa cada vez Escucho a alguien hablar sobre "otro archivo .cs" o "otro archivo .vb". A menudo (aunque no siempre) indica una falta de comprensión de la programación, al menos de la programación OO. ¿Qué es en los archivos? ¿Una clase? ¿Dos?

Usted no está tratando de acceder a estas cosas desde otro archivo , está tratando de acceder a ellos desde un método de una clase, o posiblemente de un módulo en VB.

La respuesta a su pregunta dependerá de la naturaleza de la clase y el método desde el que intenta acceder a estas cosas, y la razón por la que desea acceder a ellas.

Una vez que edite su pregunta para incluir esta información, las respuestas que reciba probablemente le mostrarán que no debe acceder a estas piezas privadas del formulario en clases que no sean la clase de formulario en sí.

+3

+1 Sospecho que el problema va mucho más allá de la visibilidad de las propiedades. – tvanfosson

1

Aunque estoy de acuerdo con John Saunders, una cosa que puede estar haciendo mal, asumiendo que tiene todo accesible a través de modificadores públicos, es que no tiene la instancia de ese formulario.

Por ejemplo, esta es la forma en que lo haría:

Form1 myForm = new Form1; 
string theButtonTextIAmLookingFor = myForm.MyButton.Text; 

Estoy asumiendo que usted puede estar tratando de acceder a él como si fuera estática, como esto:

string theButtonTextIAmLookingFor = Form1.MyButton.Text; 

Sólo algo podría querer verificar

5

No es objeto Form ya ejemplificada en Program.cs, excepto que no tiene referenciaCon la edición sencilla que puede convertir

Application.Run(new Form1()); 

a

Application.Run(formInstance = new Form1()); 

declarará como

public static Form1 formInstance; 

y utilizar

Program.formInstance.MyFunction(params); 
+0

Me gusta este método, hace que el formulario de nivel superior esté siempre disponible. Estaba teniendo problemas con ActiveForm apuntando a la forma incorrecta (incorrecto desde el punto de vista de mis códigos, de acuerdo con toda la lógica convencional). – Khainestar

Cuestiones relacionadas