如何从form2调用form1上的非静态方法

时间:2013-11-10 19:35:26

标签: c# .net

可以提供有关如何从form2调用form1上的非静态方法的示例代码。

Form1中

    public Form1()
    {
        InitializeComponent();
    }

    public void prikazi()
    {
        MessageBox.Show("ok");
    }

    private void openf2_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show();
    }

窗口2

    public Form2()
    {
        InitializeComponent();
    }

    private void callMethod_Click(object sender, EventArgs e)
    {
        // this don't work. If I change to public static void on form1 then it work's but I need non-static example
        Form1.prikazi(); 
    }

感谢

4 个答案:

答案 0 :(得分:2)

如果它是一个表单类并不重要,如果你想访问一个非静态方法,那么除了创建一个类的实例之外别无选择。

但是 - 它没有意义......所以不要这样做

查找其他替代方法,例如在公共场所创建需要静态的方法,或者考虑将此方法(或其变体)添加到表单

答案 1 :(得分:0)

您需要有一个表单实例来调用该方法。

有几种方法可以使这项工作

1)将操作传递给新表单

    public Form2()
    {
        InitializeComponent();
    }


    public Action yourAction {get; set;}

    private void callMethod_Click(object sender, EventArgs e)
    {
        Action instance = yourAction;
        if(instance != null)
            instance();
    }

然后在表格1中你可以说

private void openf2_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    frm.yourAction = prikazi;
    frm.Show();
}

2)您可以将Form1的实例传递给Form 2

所以在表格2中你有:

    public Form1 ParentForm {get; set;}

    private void callMethod_Click(object sender, EventArgs e)
    {
        if (ParentForm != null)
            ParentForm.prikazi();
    }

Form1为ParentForm变量赋值

private void openf2_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    frm.ParentForm= this;
    frm.Show();
}

答案 2 :(得分:0)

Form1中

public Form1()
{
    InitializeComponent();
}

public void prikazi()
{
    MessageBox.Show("ok");
}

private void openf2_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2(this);
    frm.Show();
}

窗口2

private Form1 parentForm;

public Form2(Form1 parentForm)
{
    this.parentForm = parentForm;
    InitializeComponent();
}

private void callMethod_Click(object sender, EventArgs e)
{
    parentForm.prikazi(); 
}

但最好学会将可重用代码捆绑到一个单独的类中,而不是传递表单实例。

答案 3 :(得分:0)

$.ajax({
        timeout:5000,
        type: 'POST',
        url: controller_action_url_for_checkStatus,
        success: function(data){
            window.location.href=data
        },
        error: function(data){
            // do something else
        }
    });