在Form2如果更新Form1的页面

时间:2023-02-04 00:57:25
想问一下各位大大...
我今天有两个Form...
当我在第一个form1按下新增时跑到form2...
可是我今天要在form2做连续新增的动作...
想问一下要怎么样我才能...当我新增一笔时就更新Form1的画面...
也就是Form1马上就会有我新增的资料... 
PS:我用的是VS2003...WinForm...

20 个解决方案

#1


该回复于2009-04-07 10:42:06被版主删除

#2


问题好像有点不清楚
你的问题是不是这样的:
form1是显示记录列表的窗体,form2是新增记录的窗体
在form1点"新增"->焦点到form2->在form2中增加很多条记录->在form1中能实时看到新增的结果?

#3


可以加timer控件来更新你想要的控件的值。
也可以重新LOAD你的FORM1,不过LOADFORM1这种方法要求数据量得小啊。

#4


建议将form2作为模式对话框显示,form2可以将所以新增的记录内容缓存到一个数组或list里,然后关闭时返回这个列表,form1就可以把这个列表加进去了. 或者简单一点你在form2关闭时再在form1里重新加载一次全部数据。
再或者你不将form2作为模式对话框显示并且想实时反映记录的增加的话也可以在form1里写一个public的添加记录方法,然后在form2里增加记录时直接调用form1里这个方法。

#5


能把form1传到form2更新么直接在form2的代码中直接修改form1的值?

#6


比较标准的做法应该是从Form2向Form1发送一个新增事件。事件的参数里面包括新增的事件。

#7


可以在RORM1里定义方法,调用这个方法增加信息(把相应的参数传入)

#8


引用 5 楼 wengjj1985 的回复:
能把form1传到form2更新么直接在form2的代码中直接修改form1的值?


这种方法可行,但是不符合对象编程的思想,子类不能用父类的方法和属性。

#9


简单的一种:
在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:

        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
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新增的资料…??
好多方法…实在有点给它混乱耶!!

#15


在Form2里定义一个Form1的变量,然后在Form1里打开Form2时将自己的引用赋给Form2里的变量,这样在Form2里就可以通过这个变量来调用Form1内的方法了,不需要new form1()

#16


在创建Form2 的时候向构造函数传递Form1 的句柄,就可以直接操作了嘛

#17


最标准的办法是用委托,符合对象编程的思想

#18


简单的就是委托和事件来实现,具体上面已经有人给你代码了

#19


引用 12 楼 justindreams 的回复:
这样做: 
在Form2里面定义委托并且声明事件 

Form2: 

C# code
        public delegate void RefreshDlg(参数);//参数你自己定,需要在Form1中用什么这里就写什么样的参数

        public event RefreshDlg refreshDlg;




在Form1中调用Form2的时候,这样写 
Form1: 

C# code

            Form2 f2 = new Form2();
            f2.refreshDlg += new Form2.RefreshDlg(f2_refreshDlg);







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();)
以上是小妹的实做方法...
希望可以帮到跟我一样的新手...

#1


该回复于2009-04-07 10:42:06被版主删除

#2


问题好像有点不清楚
你的问题是不是这样的:
form1是显示记录列表的窗体,form2是新增记录的窗体
在form1点"新增"->焦点到form2->在form2中增加很多条记录->在form1中能实时看到新增的结果?

#3


可以加timer控件来更新你想要的控件的值。
也可以重新LOAD你的FORM1,不过LOADFORM1这种方法要求数据量得小啊。

#4


建议将form2作为模式对话框显示,form2可以将所以新增的记录内容缓存到一个数组或list里,然后关闭时返回这个列表,form1就可以把这个列表加进去了. 或者简单一点你在form2关闭时再在form1里重新加载一次全部数据。
再或者你不将form2作为模式对话框显示并且想实时反映记录的增加的话也可以在form1里写一个public的添加记录方法,然后在form2里增加记录时直接调用form1里这个方法。

#5


能把form1传到form2更新么直接在form2的代码中直接修改form1的值?

#6


比较标准的做法应该是从Form2向Form1发送一个新增事件。事件的参数里面包括新增的事件。

#7


可以在RORM1里定义方法,调用这个方法增加信息(把相应的参数传入)

#8


引用 5 楼 wengjj1985 的回复:
能把form1传到form2更新么直接在form2的代码中直接修改form1的值?


这种方法可行,但是不符合对象编程的思想,子类不能用父类的方法和属性。

#9


简单的一种:
在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:

        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
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新增的资料…??
好多方法…实在有点给它混乱耶!!

#15


在Form2里定义一个Form1的变量,然后在Form1里打开Form2时将自己的引用赋给Form2里的变量,这样在Form2里就可以通过这个变量来调用Form1内的方法了,不需要new form1()

#16


在创建Form2 的时候向构造函数传递Form1 的句柄,就可以直接操作了嘛

#17


最标准的办法是用委托,符合对象编程的思想

#18


简单的就是委托和事件来实现,具体上面已经有人给你代码了

#19


引用 12 楼 justindreams 的回复:
这样做: 
在Form2里面定义委托并且声明事件 

Form2: 

C# code
        public delegate void RefreshDlg(参数);//参数你自己定,需要在Form1中用什么这里就写什么样的参数

        public event RefreshDlg refreshDlg;




在Form1中调用Form2的时候,这样写 
Form1: 

C# code

            Form2 f2 = new Form2();
            f2.refreshDlg += new Form2.RefreshDlg(f2_refreshDlg);







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();)
以上是小妹的实做方法...
希望可以帮到跟我一样的新手...

#21