0

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

表格1

    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

4 回答 4

3

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

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

寻找其他替代方案,例如在公共位置创建您需要静态的方法,或考虑将此方法(或其变体)添加到表单中

于 2013-11-10T19:46:41.100 回答
2

表格1

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(); 
}

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

于 2013-11-10T20:11:58.050 回答
1

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

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

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();
}
于 2013-11-10T19:43:52.830 回答
1

 public partial class Form1 : Form
    {
        internal static Form1 ViewForm1; // make other form run Public void

        public form1()
        {
            InitializeComponent();
            ViewForm1 = this;  //Add this
        }
        public void DoSomething()
        {
          //Code...
        }
}
......................

 public partial class Form1 : Form
    {
        public form2()
        {
            InitializeComponent();            
            Form1.ViewForm1.ShowData(); // call public void from form1
        }

于 2017-10-26T22:17:29.903 回答