C# windows程序中,Form1为主窗体,Form2和Form3为子窗体。
通过Form1菜单新建生成Form2和Form3窗体,Form2和Form3窗体同时被创建,如果点击Form3上的按钮,使Form2窗体重新载入,或更新Form2上的DataGrid数据?最好请给出代码示例
通过Form1菜单新建生成Form2和Form3窗体,Form2和Form3窗体同时被创建,如果点击Form3上的按钮,使Form2窗体重新载入,或更新Form2上的DataGrid数据?最好请给出代码示例
在form2上,增加一个public的方法,在该方法里来更新DataGrid数据.
然后,在form1里调用Form2该方法.
// Form2对象必须能够订阅到Form3上按钮点击的事件(event)
// 搞的简单些,把Form3上的button1改成public// Form1.cs
public Form2 frm2;//弹出Form2的菜单
Form2 frm2 = new Form2();
this.frm2 = frm2;
frm2.Show();//弹出From3的菜单
Form3 frm3 = new Form3();
if(frm2 != null) //如果Form2已经打开
{
frm3.button1.Click += new EventHandler(frm2.LoadData); //订阅Form3的按钮点击事件
}
frm3.Show();// Form2.cs
private DataSet ds;
ds = new DataSet(); // 在构造函数里实例化//写一个从数据库填充数据到DataSet,并显
//示在DataGrid的事件处理程序。Form3的
//button1被点击时执行这个。
public void LoadData(object sender, EventArgs e)
{
ds.Clear(); //清空DataSet
dataGrid1.DataSource = null; SqlConnection conn = new SqlConnection();
conn.ConnectionString = "server=MY_SERVER;uid=sa;pwd=;database=MY_DB";
conn.Open(); SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from MY_TABLE";
cmd.Connection = conn; SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds,"table");
dataGrid1.DataSource = ds;
dataGrid1.DataMember = "table";
conn.Close();
}private void Form2_Load(object sender, System.EventArgs e)
{
LoadData(this, EventArgs.Empty); //Form2启动时...
}
Form1 f2 = new Form1();
Form1 f3 = new Form1(f2);
f2.show();
f3.show();改Form3构造函数
先去试试
>>新建两个窗口分别在两个menuItem_Click函数中,请问如何调用?
这问题也太基础了吧?>>Form3的Button还要触发自己的Click事件...
用户点击Form3上的Button时会自动触发Button的Click事件,谁说人工触发了?Form2只是订阅了Form3的Button被点击的事件而已。
if(frm2 != null) //如果Form2已经打开
{
frm3.button1.Click += new EventHandler(frm2.LoadData); //订阅Form3的按钮点击事件
}
frm3.Show();还有
// Form1.cs
public Form2 frm2;你没仔细看代码吗?