积极答复者
Acceder a un control de un formulario desde otra clase C#

问题
答案
-
Bien, primera observación: No pienses en "acceder al formulario". Piensa en "acceder a una clase". El formulario al fin y al cabo no deja de ser una clase, y acceder a un control es acceder a una propiedad de esa clase. Así que tu pregunta se traduce en "cómo acceder desde una clase a otra clase".
Segunda observación: No tienes que pensar en "la clase" sino en "la instancia de la clase". Es decir, el formulario no es EL formulario, sino que es un "modelo" para instanciarlo y se pueden tener muchas instancias abiertas. Piensa en el Form1 abierto tres veces en pantalla. -- cada una de ellas tiene una copia del control al que quieres acceder. Incluso aunque solo lo abras una vez, el compilador no lo sabe; tienes que indicarle cuál es la instancia del Form1 que quieres usar, no vale con decir "el Form1".
En resumidas cuentas, si el formulario lo abres así:
Form1 frm = new Form1(); frm.Show();
entonces lo que necesitas para acceder al control es esa variable "frm", no "Form1". Para acceder a un control, lo llamarías con frm.NombreDelControl (y no olvides marcarlo como "public" en las propiedades).
Para acceder desde otra clase, esa clase tiene que tener acceso a la variable "frm". Dependiendo de cómo y dónde instancies esa clase habrá distintas formas de hacerle llegar "frm", por ejemplo, podrías pasársela en el constructor o a través de una propiedad.
Nótese que esto es genérico para cualquier clase a la que quieras acceder desde otra clase, no tiene nada que ver el hecho de que casualmente "frm" resulte ser un formulario.
- 已建议为答案 Jorge TurradoMVP 2018年3月3日 23:18
- 已标记为答案 Pablo RubioModerator 2018年3月9日 15:54
全部回复
-
Bien, primera observación: No pienses en "acceder al formulario". Piensa en "acceder a una clase". El formulario al fin y al cabo no deja de ser una clase, y acceder a un control es acceder a una propiedad de esa clase. Así que tu pregunta se traduce en "cómo acceder desde una clase a otra clase".
Segunda observación: No tienes que pensar en "la clase" sino en "la instancia de la clase". Es decir, el formulario no es EL formulario, sino que es un "modelo" para instanciarlo y se pueden tener muchas instancias abiertas. Piensa en el Form1 abierto tres veces en pantalla. -- cada una de ellas tiene una copia del control al que quieres acceder. Incluso aunque solo lo abras una vez, el compilador no lo sabe; tienes que indicarle cuál es la instancia del Form1 que quieres usar, no vale con decir "el Form1".
En resumidas cuentas, si el formulario lo abres así:
Form1 frm = new Form1(); frm.Show();
entonces lo que necesitas para acceder al control es esa variable "frm", no "Form1". Para acceder a un control, lo llamarías con frm.NombreDelControl (y no olvides marcarlo como "public" en las propiedades).
Para acceder desde otra clase, esa clase tiene que tener acceso a la variable "frm". Dependiendo de cómo y dónde instancies esa clase habrá distintas formas de hacerle llegar "frm", por ejemplo, podrías pasársela en el constructor o a través de una propiedad.
Nótese que esto es genérico para cualquier clase a la que quieras acceder desde otra clase, no tiene nada que ver el hecho de que casualmente "frm" resulte ser un formulario.
- 已建议为答案 Jorge TurradoMVP 2018年3月3日 23:18
- 已标记为答案 Pablo RubioModerator 2018年3月9日 15:54