日期:2014-05-18  浏览次数:20853 次

重发,用委托刷新不同窗口的控件
原来的帖答案比较乱也许是我问题没写清重发下。

我是 form7上有一个datagridview 控件 ,当我选中一条点击 edit按钮时,以form7_edit.ShowDialog()方式弹出的form7_edit。当我点击form_edit上的save按钮保存数据并form7刷新。刷新方法是form7上的formload();

这种情况,应该是哪个窗口给哪个窗口委托?现在报错:
“cj_sys.Form7_edit”不包含采用“1”参数的构造函数
请问这个接受委托的构造函数如何写?另外关闭一个窗体并释放内存的方法是不是: this.close() ?

这个formload应该是没问题的就是加载一下datagridview我以前用过好用。
当我在form7上定义委托这么写的:

C# code

public delegate void form_fr();
        private void form_fg()
        {
            formload();
        }
  private void button1_Click(object sender, EventArgs e)
        {
         Form7_edit form7_edit = new Form7_edit(new form_fr(form_fg));
         //
         form7_edit.ShowDialog();
        }



------解决方案--------------------
ShowDialog直接使用f.Owner = this;
f.ShowDialog();
if (f.DialogResult == DialogResult.OK)
{
//重新绑定
}
form7_edit中设置delegate void EditedEvent
form7_edit.Edited += new Form3.EditedEvent(f_Edited); 
f_Edited在form7
------解决方案--------------------
这个没必要用到委托吧?
就是点击Form7上的一个edit按钮,弹出一个Form7_edit对话框 是吧?
就是两个窗体间传值的事,把Form7_edit上用户输入的数据传递到Form7上去更新datagridview表格内容,没猜错吧?

先在对话框中声明一个公共变量或者属性:
class Form7_edit:Form
{
 public string s;//用户输入的信息直接保存在这里
...
}

按Save按钮的时候:
this.s = textBox1.Text;//
this.DialogResult = DialogResult.OK;//记得这句也能可以让窗体关掉
this.Close();


在Form7中这样调用:
private void button1_Click(object sender, EventArgs e)
{
Form7_edit form7_edit = new Form7_edit(new form_fr(form_fg));
//
if(form7_edit.ShowDialog()==DialogResult.OK)
datagridview[0,0].Value = form7_edit.s;//从对话框取出字符串赋给表格控件
}


------解决方案--------------------
1:这种情况,应该是哪个窗口给哪个窗口委托?
form7给Form7_edit委托。

2:请问这个接受委托的构造函数如何写?
Form7_edit form7_edit = new Form7_edit(new form_fr(form_fg));
改为:
Form7_edit form7_edit = new Form7_edit(this.form_fg);
你代码中new了一个,就不是本窗体本身了。

3:关闭一个窗体并释放内存的方法是不是: this.close() ?
是的。