已知有 窗体1、窗体2:
窗体1中 有 button1控件,fun1方法;
窗体2中 有 button2控件;点击窗体1中button1时,显示窗体2(showdialog模式);
请问:怎么实现点击窗体2中的button2时,调用窗体1中的fun1方法?
窗体1中 有 button1控件,fun1方法;
窗体2中 有 button2控件;点击窗体1中button1时,显示窗体2(showdialog模式);
请问:怎么实现点击窗体2中的button2时,调用窗体1中的fun1方法?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int Calculate(int i)
{
return ++i;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frmTarget = new Form2();
frmTarget.ShowDialog(this);
}
} public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(((Form1)this.Owner).Calculate(20).ToString());
}
}
frmTarget.ShowDialog(this);
MessageBox.Show(((Form1)this.Owner).Calculate(20).ToString());
有没有其它的方法,比如使用委托,请指点!
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public int Calculate(int i)
{
return ++i;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frmTarget = new Form2();
frmTarget.ShowDialog(this);
}
public void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("TEST");
}
} public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(((Form1)this.Owner).Calculate(20).ToString());
} private void Form2_Load(object sender, EventArgs e)
{
this.button2.Click += new System.EventHandler(((Form1)this.Owner).button2_Click);
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public viod fun()
{
return ++i;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frmTarget = new Form2();
frmTarget.ShowDialog(this);
}
}C# code
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form1 frmTarget = new Form1();
return frmTarget.fun1()
}
public partial class Form2 : Form
{
public delegate int CalculateDelegate(int i);
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(((Form1)this.Owner).Calculate(20).ToString());
} private void button2_Click(object sender, EventArgs e)
{ } private void Form2_Load(object sender, EventArgs e)
{
this.button2.Click += new System.EventHandler(((Form1)this.Owner).button2_Click);
} private void button3_Click(object sender, EventArgs e)
{
CalculateDelegate calculate = new CalculateDelegate(((Form1)this.Owner).Calculate);
MessageBox.Show(calculate(20).ToString());
}
}
Form1还是使用以上那个FORM
如果里面有窗体1的属性 传参过去不就行了吗?好像不行 不知道API行不
public delegate int CalculateDelegate(int i); //申明一个委托
CalculateDelegate calculate = new CalculateDelegate(((Form1)this.Owner).Calculate); //创建涵数实例(或者称绑定)
MessageBox.Show(calculate(20).ToString()); //调用
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void fun1()
{
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frmTarget = new Form2(this);
frmTarget.ShowDialog(this);
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private Form1 fm1;
public Form2(Form1 fm)
{
this.fm1=fm;
}
private void button1_Click(object sender, EventArgs e)
{
fm1.fun1();
}
}
再问一下:
如果form1中Calculate的函数是针对dataGridView1(form1的控件)的数据进行更新,请问怎么实现?
重写好像不行,
但你说得没错,我就是想实现更新form1中的dataGridView1的数据,不知怎么实现?
对于本例,使用委托没有多大意义
如果只是为了调用form2完成相关操作,并且更新form1的话
直接在form1中操作就好了。 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void fun1()
{
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frmTarget = new Form2(this);
frmTarget.ShowDialog(this);
//可以从form2中操作设置属性,表示是否操作成功
if(成功)
{
fun1();//更新datagridview
}
if (frmTarget != null)
frmTarget .Dispose();
}
}
此方法可以解决我现在的问题!
http://www.cnblogs.com/yongfei/archive/2008/04/30/1177111.html
思路是一样的,用委托