Cómo llamar a la función desde otro formulario

Cómo llamar a la función desde otro formulario

¿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 formulario1:

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 una instancia estática de Main (la clase, es decir) llamada Form . Luego, al comienzo del Main método, use 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, utilice eventos.

Tu error es que estás creando otra instancia de form1 , por lo tanto MasterReset está operando con formulario, que ni siquiera se muestra.

Qué puedes hacer:

  1. 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 y form2 pueden suscribirse y cada vez que cualquiera de ellos llame al MasterReset - ambos reaccionarán .

  2. Cree una dependencia de formulario (como sugirió BRAHIM Kamel):cuando cree form2 , luego pásele form1 instancia (como parámetro del constructor o configurando una propiedad pública), para poder llamar a métodos públicos no estáticos de form1 .

  3. Como un rápido, pero relativamente legítimo solución, haga 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 a MasterReset desde 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).