Después de observar en diferentes repositorios y páginas al terminar hemos descubierto la solución que te enseñamos pronto.
Solución:
¿Sabes qué es la composición sobre herencia?
En el formulario donde tienes MasterReset
deberías hacer algo como esto:
Supongamos que en su segundo formulario tiene algo como esto, y supongamos que su “formulario principal” se llamará “MasterForm”.
public partial class Form1 : Form
private MasterForm _masterForm;
public Form1(MasterForm masterForm )
InitializeComponent();
_masterForm = masterForm;
Aquí está el código en su clase masterForm:
private void button2_Click(object sender, EventArgs e)
Form1 form1 = new Form1(this);
Aquí está en su form1:
private void btn_MasterReset_Click(object sender, EventArgs e)
_masterForm.MasterReset();
¡Espero que esto ayude!
Esto funcionó para mí: en su clase de programa, declare un static instancia de Main (La clase, eso es) llamada Form
. Luego, al comienzo de la Main
método, uso Form = new Main();
Así que ahora, al iniciar su aplicación, use
Application.Run(Form);
public static Main Form;
static void Main()
Form = new Main();
Application.Run(Form)
Ahora, llamar a una función desde otro formulario es simple.
Program.Form.MasterReset(); //Make sure MasterReset is a public void
Hay múltiples soluciones posibles. Pero el problema en sí surge del mal diseño. Si necesita que muchos accedan a algo, entonces ¿por qué debería pertenecer a alguien? Sin embargo, si desea informar algo sobre cualquier cosa, use eventos.
Tu error es lo que estás creando otra instancia de form1
por lo tanto MasterReset
está operando con forma, que ni siquiera se muestra.
Lo que puedes hacer:
-
Haga (como sugiere Ravshanjon) una clase separada para manejar eso
MasterReset
(y tal vez algo más). Pero también añádele un evento.form1
yform2
pueden suscribirse y cada vez que cualquiera de ellos llamaMasterReset
– ambos lo harán reaccionar. -
Crear dependencia de formulario (como sugirió BRAHIM Kamel): cuando crea
form2
luego pásalaform1
instancia (como parámetro del constructor o configurando la propiedad pública), para poder llamar a público nostatic métodos deform1
. -
Como un rápido, pero relativamente legitimar solución, haz este método
static
:
private static Form1 _instance;
public Form1()
InitializeComponents();
_instance = this;
public static void MasterReset()
// alot of code
_instance.listView1.Clear();
// alot of code
de esta manera puedes llamar MasterReset
de cualquier otra forma como esta Form1.MasterReset()
. La desventaja de este método es que no puede tener más de una instancia de form2
(que es más probable de todos modos).
Recuerda algo, que te brindamos la opción de aclarar tu experiencia .