C#中,怎样在一个窗体中刷新另一个窗体中的数据

时间:2022-08-30 21:23:00
A窗体用于显示所有数据,B窗体对数据进行了修改,改B窗体对数据进行修改后,怎样让A窗体中的数据更新

60 个解决方案

#1


1.用ifreame的话 重新跳转到ireame.src=A窗体路径,还有很多onclick="prent.a.location.reload()" 或者--问百度
2.从新定位到A窗体
3.a到b用window.opendialog(),根据b返回值,用js自动刷新a

#2


A :
定义公用字段  B b = null;
创建B的时候,B  bb = new B();
            b =  bb;

B :
修改之后;

A:
b. 属性可以直接使用

#3


研究ing~~~

#4


B窗体修改后给A窗体发送Event,A收到Event后进行数据更新

#5


用全局变量。。。。

#6


使用事件机制,A窗口响应到B窗口触发的事件!

#7


我的这样来做的:
在b窗体创建一个带参数的构造函数 参数为a窗体
在a窗体触发事件时实例b窗体 将a窗体作为参数传入到窗体的实例
此时a窗体和b窗体就产生了关联

代码如下:
a窗体:
 public partial class Form1: Form
    {
        public Form1)
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2this);
            form2Show();
        }
    }

b窗体:
public Form2()
        {
            InitializeComponent();
        }

        Form1 form1 = new Form1();
        public Form2(Form1 form1)
        {
            InitializeComponent();//必须写  而且要卸载赋值的前面
            this.form1 = form1;
            this.textBox1.Text = form1.Controls["txtMsg"].Text;
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            form1.Controls["txtMsg"].Text = this.textBox1.Text;
            this.Close();
        }

这样单击a窗体的按钮打开b窗体,在b窗体显示a窗体文本框的内容。进行修改,点击b窗体中的修改按钮,回到a窗体,同时a窗体中文本框中值得到了修改。

#8


不知道insert被按下,有些地方“(”被我删掉了  请见谅
还请大虾们有更好的方法告知,本人qq76960759

#9


该回复于2010-08-04 08:39:08被版主删除

#10


如果是winform的话,修改数据的窗体做成模式窗体就可以了!在模式窗体打开方法后直接刷新需要刷新的窗体就可以了!

#11


Event...

#12


这个问题问得太笼统了,但从控件来说,最常用的方法就是构造函数传参法,网上有的是。。

#13


引用 5 楼 iwant_fighting 的回复:
用全局变量。。。。
在一个类文件中顶一个公共静态变量,做为数据变动的标志,比如说public static int flag,初始值随便设一个例如 flag=0.
A窗体:
用Timer 控件,在其事件里写更新操作,循环判断flag 有没有 改变,有则执行更新操作,执行完后把 flag 还原初始值。
B窗体:
修改数据的同时,修改那个类的flag 变量 其他事你懂的

#14


谢谢大家为我出的招啊,CSDN人才就是多啊,谢谢!!!

#15


使用委托:
FormA:
        private void Button_Click(object sender, EventArgs e)
        {
FormB b = new FormB();
               b.AddUsersInfor = this.AddUsersInfor;
          b.ShowDialog();
}
        private void AddUsersInfor(string updatedata)
        {
             Console.Writeline( updatedata );
        }

FormB:
        public Action<string> AddUsersInfor;
private void Button_Click(object sender, EventArgs e)
        {
                if (AddUsersInfor != null) AddUsersInfor( "test data" );
        }

#16


用委托是最好的方法!

#17


用event即可,步骤如下:
1。你在B窗口中定一个event,A Form中你包含一个对B Form的引用,然后你在A中写一个方法C,注册到B的这个event上。
2。然后你修改B中数据的方法中触发这个event,A就会接收到并执行方法C,此处注意你需要在A的UI线程中去执行具体的更新界面的函数。

#18


试了一下,还没出结果

#19


 委托
     听歌

#20


   如果是winform 我建议你用BindingSource这个不但能解决你的问题还能实现datagridview无刷新

#21


      最笨的办法就是定义一个静态的字段

#22


委托+事件

#23


A窗体用于显示所有数据,B窗体对数据进行了修改,改B窗体对数据进行修改后,怎样让A窗体中的数据更新

从描述看,你的应该属于Winform应用程序,推荐用委托,就是在B窗体中定义一个事件,然后在B窗体中修改数据后,触发这个事件。
最后还要让A窗体监听B窗体的这个事件,这样B修改后,A就会知道这个事件,执行相应的刷新操作。
  阿捷 

#24


引用 22 楼 lordbaby 的回复:
委托+事件

这个是正解

#25


该回复于2010-09-29 10:02:51被版主删除

#26


引用 24 楼 ireenter 的回复:
引用 22 楼 lordbaby 的回复:

委托+事件

这个是正解

]
还真有用

#27


该回复于2010-09-29 16:06:58被版主删除

#28


B从A中用window.open打开,修改完毕之后关闭B,同时用JS document.form[0].submit();这句话就是刷新A了,非常简单。

#29


该回复于2010-10-22 09:35:07被版主删除

#30


这是一个程序还是两个程序?是进程级的还是线程级的,有四套方案。同一个程序,一个进程内,最先近的方法就是委托了。同一进程的两个线程间就用全局》》》》》
也就是这个样子了。看你的结构了。

#32


一会去试试委托~~~~~~~~

#33


事件触发重新绑定

#34


事件触发重新绑定

#35


DotNET 的回调可以用委托(事件)或者接口

#36


DotNET 中的回调可以用委托(事件)或接口

#37


在B窗体修改数据之前把A窗体隐藏起来,
等修改完数据后在把A窗体show出来,
在B修改的数据就能在A上面刷新了

#38


我觉得在B窗体输入数据前,
先把A窗体隐藏起来,
在B窗体上输完数据后,关闭本窗体
在show出A窗体
那在B的数据就能在A窗体上刷新

是个笨方法,但实用

#39


我觉得在B窗体输入数据前,
先把A窗体隐藏起来,
在B窗体上输完数据后,关闭本窗体
在show出A窗体
那在B的数据就能在A窗体上刷新

是个笨方法,但实用

#40


可以用委托+事件,也可以设置全局变量,加上一个Timer控件,专门查看全局变量是否改变

#41


通过委托或构造方法,看下你要传递的数据是什么类型,就在相应的窗体中,声明这个数据类型的 变量,并初始化来接收,作为参数传递

#42


楼主可以搜下窗体之间传值的方法,有好几种

#43


该回复于2010-11-23 10:09:17被版主删除

#44


用委托事件吧,代码自己写

#45


全局不安全 面向对象的编程最忌讳用全局变量了
引用 5 楼 iwant_fighting 的回复:
用全局变量。。。。

#46


委托回调

#47


将显示功能单独写一个方法,修改完再调用一下...

#48


prent.reload()

#49


parent.reload()

#50


引用 23 楼 computerfox 的回复:
A窗体用于显示所有数据,B窗体对数据进行了修改,改B窗体对数据进行修改后,怎样让A窗体中的数据更新

从描述看,你的应该属于Winform应用程序,推荐用委托,就是在B窗体中定义一个事件,然后在B窗体中修改数据后,触发这个事件。
最后还要让A窗体监听B窗体的这个事件,这样B修改后,A就会知道这个事件,执行相应的刷新操作。
阿捷

这是正解。绝对没问题!

#1


1.用ifreame的话 重新跳转到ireame.src=A窗体路径,还有很多onclick="prent.a.location.reload()" 或者--问百度
2.从新定位到A窗体
3.a到b用window.opendialog(),根据b返回值,用js自动刷新a

#2


A :
定义公用字段  B b = null;
创建B的时候,B  bb = new B();
            b =  bb;

B :
修改之后;

A:
b. 属性可以直接使用

#3


研究ing~~~

#4


B窗体修改后给A窗体发送Event,A收到Event后进行数据更新

#5


用全局变量。。。。

#6


使用事件机制,A窗口响应到B窗口触发的事件!

#7


我的这样来做的:
在b窗体创建一个带参数的构造函数 参数为a窗体
在a窗体触发事件时实例b窗体 将a窗体作为参数传入到窗体的实例
此时a窗体和b窗体就产生了关联

代码如下:
a窗体:
 public partial class Form1: Form
    {
        public Form1)
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2this);
            form2Show();
        }
    }

b窗体:
public Form2()
        {
            InitializeComponent();
        }

        Form1 form1 = new Form1();
        public Form2(Form1 form1)
        {
            InitializeComponent();//必须写  而且要卸载赋值的前面
            this.form1 = form1;
            this.textBox1.Text = form1.Controls["txtMsg"].Text;
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            form1.Controls["txtMsg"].Text = this.textBox1.Text;
            this.Close();
        }

这样单击a窗体的按钮打开b窗体,在b窗体显示a窗体文本框的内容。进行修改,点击b窗体中的修改按钮,回到a窗体,同时a窗体中文本框中值得到了修改。

#8


不知道insert被按下,有些地方“(”被我删掉了  请见谅
还请大虾们有更好的方法告知,本人qq76960759

#9


该回复于2010-08-04 08:39:08被版主删除

#10


如果是winform的话,修改数据的窗体做成模式窗体就可以了!在模式窗体打开方法后直接刷新需要刷新的窗体就可以了!

#11


Event...

#12


这个问题问得太笼统了,但从控件来说,最常用的方法就是构造函数传参法,网上有的是。。

#13


引用 5 楼 iwant_fighting 的回复:
用全局变量。。。。
在一个类文件中顶一个公共静态变量,做为数据变动的标志,比如说public static int flag,初始值随便设一个例如 flag=0.
A窗体:
用Timer 控件,在其事件里写更新操作,循环判断flag 有没有 改变,有则执行更新操作,执行完后把 flag 还原初始值。
B窗体:
修改数据的同时,修改那个类的flag 变量 其他事你懂的

#14


谢谢大家为我出的招啊,CSDN人才就是多啊,谢谢!!!

#15


使用委托:
FormA:
        private void Button_Click(object sender, EventArgs e)
        {
FormB b = new FormB();
               b.AddUsersInfor = this.AddUsersInfor;
          b.ShowDialog();
}
        private void AddUsersInfor(string updatedata)
        {
             Console.Writeline( updatedata );
        }

FormB:
        public Action<string> AddUsersInfor;
private void Button_Click(object sender, EventArgs e)
        {
                if (AddUsersInfor != null) AddUsersInfor( "test data" );
        }

#16


用委托是最好的方法!

#17


用event即可,步骤如下:
1。你在B窗口中定一个event,A Form中你包含一个对B Form的引用,然后你在A中写一个方法C,注册到B的这个event上。
2。然后你修改B中数据的方法中触发这个event,A就会接收到并执行方法C,此处注意你需要在A的UI线程中去执行具体的更新界面的函数。

#18


试了一下,还没出结果

#19


 委托
     听歌

#20


   如果是winform 我建议你用BindingSource这个不但能解决你的问题还能实现datagridview无刷新

#21


      最笨的办法就是定义一个静态的字段

#22


委托+事件

#23


A窗体用于显示所有数据,B窗体对数据进行了修改,改B窗体对数据进行修改后,怎样让A窗体中的数据更新

从描述看,你的应该属于Winform应用程序,推荐用委托,就是在B窗体中定义一个事件,然后在B窗体中修改数据后,触发这个事件。
最后还要让A窗体监听B窗体的这个事件,这样B修改后,A就会知道这个事件,执行相应的刷新操作。
  阿捷 

#24


引用 22 楼 lordbaby 的回复:
委托+事件

这个是正解

#25


该回复于2010-09-29 10:02:51被版主删除

#26


引用 24 楼 ireenter 的回复:
引用 22 楼 lordbaby 的回复:

委托+事件

这个是正解

]
还真有用

#27


该回复于2010-09-29 16:06:58被版主删除

#28


B从A中用window.open打开,修改完毕之后关闭B,同时用JS document.form[0].submit();这句话就是刷新A了,非常简单。

#29


该回复于2010-10-22 09:35:07被版主删除

#30


这是一个程序还是两个程序?是进程级的还是线程级的,有四套方案。同一个程序,一个进程内,最先近的方法就是委托了。同一进程的两个线程间就用全局》》》》》
也就是这个样子了。看你的结构了。

#31


#32


一会去试试委托~~~~~~~~

#33


事件触发重新绑定

#34


事件触发重新绑定

#35


DotNET 的回调可以用委托(事件)或者接口

#36


DotNET 中的回调可以用委托(事件)或接口

#37


在B窗体修改数据之前把A窗体隐藏起来,
等修改完数据后在把A窗体show出来,
在B修改的数据就能在A上面刷新了

#38


我觉得在B窗体输入数据前,
先把A窗体隐藏起来,
在B窗体上输完数据后,关闭本窗体
在show出A窗体
那在B的数据就能在A窗体上刷新

是个笨方法,但实用

#39


我觉得在B窗体输入数据前,
先把A窗体隐藏起来,
在B窗体上输完数据后,关闭本窗体
在show出A窗体
那在B的数据就能在A窗体上刷新

是个笨方法,但实用

#40


可以用委托+事件,也可以设置全局变量,加上一个Timer控件,专门查看全局变量是否改变

#41


通过委托或构造方法,看下你要传递的数据是什么类型,就在相应的窗体中,声明这个数据类型的 变量,并初始化来接收,作为参数传递

#42


楼主可以搜下窗体之间传值的方法,有好几种

#43


该回复于2010-11-23 10:09:17被版主删除

#44


用委托事件吧,代码自己写

#45


全局不安全 面向对象的编程最忌讳用全局变量了
引用 5 楼 iwant_fighting 的回复:
用全局变量。。。。

#46


委托回调

#47


将显示功能单独写一个方法,修改完再调用一下...

#48


prent.reload()

#49


parent.reload()

#50


引用 23 楼 computerfox 的回复:
A窗体用于显示所有数据,B窗体对数据进行了修改,改B窗体对数据进行修改后,怎样让A窗体中的数据更新

从描述看,你的应该属于Winform应用程序,推荐用委托,就是在B窗体中定义一个事件,然后在B窗体中修改数据后,触发这个事件。
最后还要让A窗体监听B窗体的这个事件,这样B修改后,A就会知道这个事件,执行相应的刷新操作。
阿捷

这是正解。绝对没问题!