![](/img/trans.png)
[英]How can i call a method with parameter of form1 from form2 and plot on chart on form1
[英]how to call non-static method on form1 from form2
可以提供有關如何從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();
}
謝謝
不管是表單類,還是要訪問非靜態方法,創建該類的實例都是沒有其他選擇的。
但是-這沒有道理..所以不要這樣做
查找其他替代方法,例如在一個普通的地方創建您需要靜態的方法,或考慮將此方法(或其變體)添加到表單中
您需要具有表單的實例才能調用該方法。
有幾種方法可以使這項工作
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();
}
表格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();
}
但是最好學會將可重用的代碼捆綁到一個單獨的類中,而不是傳遞表單實例。
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 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.