winform 一个窗体触发另一个窗体的LOAD
A窗体显示数据,当点击A窗体中的一个按钮使用ShowDialog打开B窗体进行数据编辑,B窗体中做完数据编辑点击确定按钮保存并关闭B窗体,但A窗体并没有执行load事件重...
A窗体显示数据,当点击A窗体中的一个按钮 使用ShowDialog打开B窗体进行数据编辑,B窗体中做完数据编辑点击确定按钮保存并关闭B窗体,但A窗体并没有执行load事件重新刷新数据,请问上述情况如何解决?
展开
4个回答
推荐于2018-04-24
展开全部
教你一个实现方法,绝对有效。我这有两个窗体Form1和Form2Form1中有两个控件1个Label控件和1个编辑按钮。Form2中也有两个控件1个textBox控件和1个确定按钮。我要模拟你说的,点击Form1中的button1打开Form2,在Form2的文本框中输入数据再点“确定”按钮后,Form2关闭,Form1刷新在Label控件中显示在Form2文本框中输入的值。Form1代码:----------------------------------------------------------------------------------public partial class Form1 : Form
{
public static Form1 frm1 = null; //关键,创建一个自身的静态对象
public Form1()
{
InitializeComponent();
frm1 = this; //frm1指向自身
} private void button1_Click(object sender, EventArgs e) //编辑按钮单击事件代码
{
Form2 frm2 = new Form2();
frm2.ShowDialog();
} private void Form1_Load(object sender, EventArgs e) //窗体载入事件代码
{
this.label1.Text = Program.abc; //abc是在Program类中定义公共变量
}
public void Frm1_RePaint(EventArgs e) //窗体重绘 {
this.Controls.Clear();
this.InitializeComponent();
this.OnLoad(e); //重新载入
}
}----------------------------------------------------------------------------------Form2中的“确定”按钮单击事件代码:private void button1_Click(object sender, EventArgs e)
{
Program.abc = this.textBox1.Text;
Form1.frm1.Frm1_RePaint(e); //重绘窗体
this.Dispose();
}--------------------------------------------------------------------------------------------以上只是一个模拟,但我在很多大的软件实例中也用过,不过我种方法并不是非常安全的。
{
public static Form1 frm1 = null; //关键,创建一个自身的静态对象
public Form1()
{
InitializeComponent();
frm1 = this; //frm1指向自身
} private void button1_Click(object sender, EventArgs e) //编辑按钮单击事件代码
{
Form2 frm2 = new Form2();
frm2.ShowDialog();
} private void Form1_Load(object sender, EventArgs e) //窗体载入事件代码
{
this.label1.Text = Program.abc; //abc是在Program类中定义公共变量
}
public void Frm1_RePaint(EventArgs e) //窗体重绘 {
this.Controls.Clear();
this.InitializeComponent();
this.OnLoad(e); //重新载入
}
}----------------------------------------------------------------------------------Form2中的“确定”按钮单击事件代码:private void button1_Click(object sender, EventArgs e)
{
Program.abc = this.textBox1.Text;
Form1.frm1.Frm1_RePaint(e); //重绘窗体
this.Dispose();
}--------------------------------------------------------------------------------------------以上只是一个模拟,但我在很多大的软件实例中也用过,不过我种方法并不是非常安全的。
2013-06-23
展开全部
load事件只执行一次,不会在执行但你可以把a窗体对象在打开b窗体时传值到b窗体,当关闭b窗体时执行a窗体的 load事件即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-23
展开全部
其实很简单就实现了,你先把Load中负责加载数据的代码独立成一个函数,然后在Load事件中调用,这样就一打开有了数据,然后在ShowDialog()之后,再调用一次函数,就重新加载了数据Form1_Load(..){.....调用加载数据函数...}....ShowDialog();调用加载数据函数;.....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-23
展开全部
这个最好使用父子窗体,才能做到数据及时更新。而并不是重复执行load里面的刷新代码,这不合适。load只能载入一次,难道还要关闭了重新打开不成?设计上的失误。当然,用计时器也可以做到,更加简单。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询