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

C# 如何从form2调用form1上的非静态方法,c#,.net,C#,.net,sameone能否提供关于如何从form2调用form1上的非静态方法的示例代码 表格1 表格2 谢谢您需要一个表单实例来调用该方法 有几种方法可以让这一切顺利进行 1) 将操作传递到新窗体 public Form2() { InitializeComponent(); } public Action yourAction {get; set;} private void callMethod_Click(object sender,

sameone能否提供关于如何从form2调用form1上的非静态方法的示例代码

表格1

表格2


谢谢

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

有几种方法可以让这一切顺利进行

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的实例传递到Form2

因此,在表格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();
}

不管它是否是表单类,如果您想访问非静态方法,那么没有其他选择来创建该类的实例

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

找到其他的替代方法,比如在一个共同的地方创建你需要静态的方法,或者考虑把这个方法(或它的变体)添加到表格

Frim1

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

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

公共部分类表单1:表单
{
内部静态Form1 ViewForm1;//使其他窗体运行Public void
公共表格1()
{
初始化组件();
ViewForm1=this;//添加此
}
公共无效剂量测定法()
{
//代码。。。
}
}
......................
公共部分类Form1:Form
{
公共表格2()
{
初始化组件();
Form1.ViewForm1.ShowData();//从Form1调用public void

}
您需要找到原始实例。另外,请说出您的表单名称。您的体系结构让我害怕。可能重复的或的、或的、或的、或的、或的、或的…的可能重复。谢谢。1.您的操作由于其保护级别2而无法访问。属性或索引器“System.Windows.forms.ContainerControl.ParentForm”无法分配给--很抱歉,这是一个很不好的名字。把它重新命名为原始形式或是你想要的任何东西。对于你的行为,把它放在公众的视野中。更新答案。请考虑为什么这个解决方案有一个简短的解释。
private void openf2_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    frm.ParentForm= this;
    frm.Show();
}
public Form1()
{
    InitializeComponent();
}

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

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

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

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