可以提供有关如何从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();
}
感谢
答案 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
}
});