我今天有两个Form...
当我在第一个form1按下新增时跑到form2...
可是我今天要在form2做连续新增的动作...
想问一下要怎么样我才能...当我新增一笔时就更新Form1的画面...
也就是Form1马上就会有我新增的资料...
PS:我用的是VS2003...WinForm...
20 个解决方案
#1
#2
问题好像有点不清楚
你的问题是不是这样的:
form1是显示记录列表的窗体,form2是新增记录的窗体
在form1点"新增"->焦点到form2->在form2中增加很多条记录->在form1中能实时看到新增的结果?
你的问题是不是这样的:
form1是显示记录列表的窗体,form2是新增记录的窗体
在form1点"新增"->焦点到form2->在form2中增加很多条记录->在form1中能实时看到新增的结果?
#3
可以加timer控件来更新你想要的控件的值。
也可以重新LOAD你的FORM1,不过LOADFORM1这种方法要求数据量得小啊。
也可以重新LOAD你的FORM1,不过LOADFORM1这种方法要求数据量得小啊。
#4
建议将form2作为模式对话框显示,form2可以将所以新增的记录内容缓存到一个数组或list里,然后关闭时返回这个列表,form1就可以把这个列表加进去了. 或者简单一点你在form2关闭时再在form1里重新加载一次全部数据。
再或者你不将form2作为模式对话框显示并且想实时反映记录的增加的话也可以在form1里写一个public的添加记录方法,然后在form2里增加记录时直接调用form1里这个方法。
再或者你不将form2作为模式对话框显示并且想实时反映记录的增加的话也可以在form1里写一个public的添加记录方法,然后在form2里增加记录时直接调用form1里这个方法。
#5
能把form1传到form2更新么直接在form2的代码中直接修改form1的值?
#6
比较标准的做法应该是从Form2向Form1发送一个新增事件。事件的参数里面包括新增的事件。
#7
可以在RORM1里定义方法,调用这个方法增加信息(把相应的参数传入)
#8
这种方法可行,但是不符合对象编程的思想,子类不能用父类的方法和属性。
#9
简单的一种:
在Form1中定一个public Form frm2 = null;变量,当frm2中Form1 frm1 = new Form1();frm1.frm2 = this;frm1.show();这样就可以在form1中控制Form2
在Form1中定一个public Form frm2 = null;变量,当frm2中Form1 frm1 = new Form1();frm1.frm2 = this;frm1.show();这样就可以在form1中控制Form2
#10
思路:1)Form2中取到Form1的对象,一般通过Form2的成员字段构造函数;2)Form1的更新方法为public
#11
用委托啊
#12
这样做:
在Form2里面定义委托并且声明事件
Form2:
在Form1中调用Form2的时候,这样写
Form1:
Form1中调用的Form2的refreshDlg事件的响应方法:
在Form2里面定义委托并且声明事件
Form2:
public delegate void RefreshDlg(参数);//参数你自己定,需要在Form1中用什么这里就写什么样的参数
public event RefreshDlg refreshDlg;
在Form1中调用Form2的时候,这样写
Form1:
Form2 f2 = new Form2();
f2.refreshDlg += new Form2.RefreshDlg(f2_refreshDlg);
Form1中调用的Form2的refreshDlg事件的响应方法:
void f2_refreshDlg(参数)
{
//这里做你要进行的Form1的增加数据的操作
}
#13
以下一段代码 希望对你有帮助
Form1
Form2
Form1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2(this);
frm2.Show();
}
//注意以下方法定义为共有的
public string MyText
{
get { return this.label1.Text; }
set { this.label1.Text = value; }
}
public void binding()
{
//绑定数据源
}
}
Form2
public partial class Form2 : Form
{
//有一个参数的构造方法
//或者 private Form frm=new Form();
//使用frm是 强制转换" (From1)frm "
private Form1 frm=new Form1();
public Form2(Form1 frm)
{
InitializeComponent();
this.frm = frm;
}
private void button1_Click(object sender, EventArgs e)
{
this.frm.MyText = "AAAAAA";
this.frm.binding();//使Form1重新绑定数据源
}
}
#14
我想问一下…
如果我在Form2做一个Form1 mf = new form1();
这样不是新建一个Form吗??
可是我原本的Form1并没有关闭…
且我是希望在原本的form1上显示我Form2新增的资料…??
好多方法…实在有点给它混乱耶!!
如果我在Form2做一个Form1 mf = new form1();
这样不是新建一个Form吗??
可是我原本的Form1并没有关闭…
且我是希望在原本的form1上显示我Form2新增的资料…??
好多方法…实在有点给它混乱耶!!
#15
在Form2里定义一个Form1的变量,然后在Form1里打开Form2时将自己的引用赋给Form2里的变量,这样在Form2里就可以通过这个变量来调用Form1内的方法了,不需要new form1()
#16
在创建Form2 的时候向构造函数传递Form1 的句柄,就可以直接操作了嘛
#17
最标准的办法是用委托,符合对象编程的思想
#18
简单的就是委托和事件来实现,具体上面已经有人给你代码了
#19
f2.refreshDlg += new Form2.RefreshDlg(f2_refreshDlg);
會有錯誤耶...
Form2.RefreshDlg denotes a 'field' where a 'class' was expected
??這是什麼意思呀??且為我什麼我在vs2003的Document找不到refreshDlg....
#20
我最后的作法为:
在Form1的DataSet设为internal....(因为我要更新的是DataSet)
再要开启Form2的地方多加个Form2.owner = this....
而Form2要去更新Form1的地写新建个Form1(Form1 mf = new Form1())
而就可以在Form2直接更新From1的DataSet了(DataRow dr = mf.DataSet.table["XXX"].newRow();)
以上是小妹的实做方法...
希望可以帮到跟我一样的新手...
在Form1的DataSet设为internal....(因为我要更新的是DataSet)
再要开启Form2的地方多加个Form2.owner = this....
而Form2要去更新Form1的地写新建个Form1(Form1 mf = new Form1())
而就可以在Form2直接更新From1的DataSet了(DataRow dr = mf.DataSet.table["XXX"].newRow();)
以上是小妹的实做方法...
希望可以帮到跟我一样的新手...
#21
#1
#2
问题好像有点不清楚
你的问题是不是这样的:
form1是显示记录列表的窗体,form2是新增记录的窗体
在form1点"新增"->焦点到form2->在form2中增加很多条记录->在form1中能实时看到新增的结果?
你的问题是不是这样的:
form1是显示记录列表的窗体,form2是新增记录的窗体
在form1点"新增"->焦点到form2->在form2中增加很多条记录->在form1中能实时看到新增的结果?
#3
可以加timer控件来更新你想要的控件的值。
也可以重新LOAD你的FORM1,不过LOADFORM1这种方法要求数据量得小啊。
也可以重新LOAD你的FORM1,不过LOADFORM1这种方法要求数据量得小啊。
#4
建议将form2作为模式对话框显示,form2可以将所以新增的记录内容缓存到一个数组或list里,然后关闭时返回这个列表,form1就可以把这个列表加进去了. 或者简单一点你在form2关闭时再在form1里重新加载一次全部数据。
再或者你不将form2作为模式对话框显示并且想实时反映记录的增加的话也可以在form1里写一个public的添加记录方法,然后在form2里增加记录时直接调用form1里这个方法。
再或者你不将form2作为模式对话框显示并且想实时反映记录的增加的话也可以在form1里写一个public的添加记录方法,然后在form2里增加记录时直接调用form1里这个方法。
#5
能把form1传到form2更新么直接在form2的代码中直接修改form1的值?
#6
比较标准的做法应该是从Form2向Form1发送一个新增事件。事件的参数里面包括新增的事件。
#7
可以在RORM1里定义方法,调用这个方法增加信息(把相应的参数传入)
#8
这种方法可行,但是不符合对象编程的思想,子类不能用父类的方法和属性。
#9
简单的一种:
在Form1中定一个public Form frm2 = null;变量,当frm2中Form1 frm1 = new Form1();frm1.frm2 = this;frm1.show();这样就可以在form1中控制Form2
在Form1中定一个public Form frm2 = null;变量,当frm2中Form1 frm1 = new Form1();frm1.frm2 = this;frm1.show();这样就可以在form1中控制Form2
#10
思路:1)Form2中取到Form1的对象,一般通过Form2的成员字段构造函数;2)Form1的更新方法为public
#11
用委托啊
#12
这样做:
在Form2里面定义委托并且声明事件
Form2:
在Form1中调用Form2的时候,这样写
Form1:
Form1中调用的Form2的refreshDlg事件的响应方法:
在Form2里面定义委托并且声明事件
Form2:
public delegate void RefreshDlg(参数);//参数你自己定,需要在Form1中用什么这里就写什么样的参数
public event RefreshDlg refreshDlg;
在Form1中调用Form2的时候,这样写
Form1:
Form2 f2 = new Form2();
f2.refreshDlg += new Form2.RefreshDlg(f2_refreshDlg);
Form1中调用的Form2的refreshDlg事件的响应方法:
void f2_refreshDlg(参数)
{
//这里做你要进行的Form1的增加数据的操作
}
#13
以下一段代码 希望对你有帮助
Form1
Form2
Form1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2(this);
frm2.Show();
}
//注意以下方法定义为共有的
public string MyText
{
get { return this.label1.Text; }
set { this.label1.Text = value; }
}
public void binding()
{
//绑定数据源
}
}
Form2
public partial class Form2 : Form
{
//有一个参数的构造方法
//或者 private Form frm=new Form();
//使用frm是 强制转换" (From1)frm "
private Form1 frm=new Form1();
public Form2(Form1 frm)
{
InitializeComponent();
this.frm = frm;
}
private void button1_Click(object sender, EventArgs e)
{
this.frm.MyText = "AAAAAA";
this.frm.binding();//使Form1重新绑定数据源
}
}
#14
我想问一下…
如果我在Form2做一个Form1 mf = new form1();
这样不是新建一个Form吗??
可是我原本的Form1并没有关闭…
且我是希望在原本的form1上显示我Form2新增的资料…??
好多方法…实在有点给它混乱耶!!
如果我在Form2做一个Form1 mf = new form1();
这样不是新建一个Form吗??
可是我原本的Form1并没有关闭…
且我是希望在原本的form1上显示我Form2新增的资料…??
好多方法…实在有点给它混乱耶!!
#15
在Form2里定义一个Form1的变量,然后在Form1里打开Form2时将自己的引用赋给Form2里的变量,这样在Form2里就可以通过这个变量来调用Form1内的方法了,不需要new form1()
#16
在创建Form2 的时候向构造函数传递Form1 的句柄,就可以直接操作了嘛
#17
最标准的办法是用委托,符合对象编程的思想
#18
简单的就是委托和事件来实现,具体上面已经有人给你代码了
#19
f2.refreshDlg += new Form2.RefreshDlg(f2_refreshDlg);
會有錯誤耶...
Form2.RefreshDlg denotes a 'field' where a 'class' was expected
??這是什麼意思呀??且為我什麼我在vs2003的Document找不到refreshDlg....
#20
我最后的作法为:
在Form1的DataSet设为internal....(因为我要更新的是DataSet)
再要开启Form2的地方多加个Form2.owner = this....
而Form2要去更新Form1的地写新建个Form1(Form1 mf = new Form1())
而就可以在Form2直接更新From1的DataSet了(DataRow dr = mf.DataSet.table["XXX"].newRow();)
以上是小妹的实做方法...
希望可以帮到跟我一样的新手...
在Form1的DataSet设为internal....(因为我要更新的是DataSet)
再要开启Form2的地方多加个Form2.owner = this....
而Form2要去更新Form1的地写新建个Form1(Form1 mf = new Form1())
而就可以在Form2直接更新From1的DataSet了(DataRow dr = mf.DataSet.table["XXX"].newRow();)
以上是小妹的实做方法...
希望可以帮到跟我一样的新手...