我想通过子窗体的一个按钮,刷新父窗体的数据,父窗体的数据能立即显现,请问如何实现?
解决方案 »
- ?用webrequest得到的淘宝_tb_token_值与源码查看不同?
- Global.asax 定时更新数据的问题
- winform combobox 怎么添加 值、文本
- 关于dataGridView的颜色问题!
- dataGridView1指定行和CrystalReportViewer问题
- winform中GridView绑定了数据但为什么没有反映
- 我DataSet读取一个了一个Xml,我怎么样才能安全地插入到数据库??
- C#。net在母版中用link的shortcut icon和Bookmark做IE地址栏图标和收藏栏图标没有用是什么原因啊?
- 说我sql字符串错误,是不是过长,怎么修改,我改了又出现了sql语法错误!
- 在WindowsForm中如何获取DataGrid中的数据?
- 跪求:谁能帮我把单房间的聊天室改成多房间的
- 如何调用QQ相册里的图片
要么就这么些在父窗体中,写入如下静态构造
public mainFrm main=null;在构造中写入main=this;然后把其mainFrm_load()事件改成公共public类型在子窗体中在按钮事件中直接引用
mainFrm.main.mainFrm_Load(sender,e);就可以刷新了
构造怎么写?
public mainfrom()
{
main=this;
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace EventTransData
{
public delegate void CallbackHander(string s);//委托,参数可修改,多参数可以自己定义一个类 public delegate void CallbackHander1(bool b);
public partial class Form1 : Form
{
object thislock = new object();
public Form1()
{
InitializeComponent();
}
public event CallbackHander GetString;//定义的事件,命名规则不对 System.Threading.Timer t ;
private void button1_Click(object sender, EventArgs e)
{ //我用的System.Threading.Timer,随便用的
t = new System.Threading.Timer(new System.Threading.TimerCallback(SetData),"",1000,1000);//System.Threading.Timeout.Infinite);
} private void SetEnabled(bool b)
{
//这里你可以将你想要控制的控件添加进去,我只是简单的将所有的Controls做了一次判断
//foreach (Control con in this.Controls)
//{
// con.Enabled = b;
//}
this.Enabled = b;
} private void SetData(object o)
{
lock (thislock)
{
if (this.InvokeRequired)
{
Invoke(new CallbackHander1(SetEnabled), false);
}
else
{
SetEnabled(false);
}
if (this.label1.InvokeRequired)//跨线程调用控件判断
{
Invoke(new CallbackHander(Refreshlabel), "开始");
}
else
{
Refreshlabel("开始");
} if (GetString != null)//开始的事件
{
GetString("开始");
}
System.Threading.Thread.Sleep(5000);//你处理的过程
if (this.label1.InvokeRequired)
{
Invoke(new CallbackHander(Refreshlabel), "结束");
}
else
{
Refreshlabel("结束");
}
if (this.InvokeRequired)
{
Invoke(new CallbackHander1(SetEnabled), true);
}
else
{
SetEnabled(true);
}
if (GetString != null)//结束的事件
{
GetString("结束");
}
System.Threading.Thread.Sleep(5000);
}
}
private void Refreshlabel(string value)
{
this.label1.Text = value;
} private void button2_Click(object sender, EventArgs e)
{
//这两个窗体的关系如果不一样你需要自己修改
Form2 f = new Form2();
f.Owner = this;
//f.Show();//非模态
f.ShowDialog();//模态?
}
}
}using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace EventTransData
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void Form2_Load(object sender, EventArgs e)
{
Form1 f = (Form1)this.Owner;
f.GetString += new CallbackHander(f_GetString);
} void f_GetString(string s)
{
if (this.label1.InvokeRequired)
{
Invoke(new CallbackHander( Refreshlabel),s);
}
else
{
Refreshlabel(s);
}
}
private void Refreshlabel(string value)
{
this.label1.Text = value;
} }
}
前两天也想实现和你类似的功能,代码在上边,看能帮助你不!