C# 如何从form2调用form1上的非静态方法
sameone能否提供关于如何从form2调用form1上的非静态方法的示例代码 表格1 表格2C# 如何从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,
谢谢您需要一个表单实例来调用该方法 有几种方法可以让这一切顺利进行 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();
}