两个Form窗体之间的关联性问题<跨窗体数据同步>
来源:互联网 发布:js中format 编辑:程序博客网 时间:2024/06/06 04:26
续:多线程委托之跨线程问题分析–在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(本博客中文章)
异常解决方案:在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
如何构建两个窗体之间的关联性?
使用构造函数去构建两个窗体之间的关联:
主窗体代码:
private void ChaXun_Click(object sender, EventArgs e)//跨窗体重点{ //实例化子窗体,传递参数为当前类。 YuanGonChaXun YGCX = new YuanGonChaXun(this); YGCX.Show(this);}
子窗体代码:
在子窗体中新构建一个全新的构造函数,参数为主窗体。
//声明一个主窗体变量,(切记不要new,因为new之后是一个全新的主窗体,不是原本的那个主窗体)KGWrenyuanGuanLi kgw = null;public YuanGonChaXun(KGWrenyuanGuanLi KGW){//需要新建一个全新的构造函数,构造函数的参数是接收“原本主窗体” InitializeComponent(); //把“原本的主窗体”赋值给“声明的主窗体”。 kgw = KGW;}
实例代码:
功能:子窗体输入sql判断条件,点击确认按钮同时,同步刷新主窗体的DataGridView控件的表格数据。
第一种两个窗体之间使用普通调用代码
子窗体代码:
#region 跨窗体重点//声明一个主窗体变量,(切记不要new,因为new之后是一个全新的主窗体,不是原本的那个主窗体)KGWrenyuanGuanLi kgw = null;public YuanGonChaXun(KGWrenyuanGuanLi KGW){//需要新建一个全新的构造函数,构造函数的参数是接收“原本主窗体” InitializeComponent(); //把“原本的主窗体”赋值给“声明的主窗体”。 kgw = KGW;} #endregionprivate void New1()//普通方法调用{ sqlconnent co = new sqlconnent(); SqlConnection conn = co.connent(); conn.Open(); try { DataTable NewDt = new DataTable(); DataSet ds = new DataSet(); string strselect = "select * from KeHuBiao where 客户名称 = '" + textBox2.Text + "'"; SqlDataAdapter da = new SqlDataAdapter(strselect, conn); da.Fill(ds); kgw.NewTable1(ds.Tables[0]); } catch (Exception ee) { MessageBox.Show(ee.Message.ToString()); } finally { conn.Close(); }}
主窗体代码:
public void NewTable1(DataTable dt)//普通调用{ this.dataGridView1.DataSource = dt; }
第二种两个窗体之间使用多线程代码
子窗体代码:
#region 跨窗体重点//声明一个主窗体变量,(切记不要new,因为new之后是一个全新的主窗体,不是原本的那个主窗体)KGWrenyuanGuanLi kgw = null;public YuanGonChaXun(KGWrenyuanGuanLi KGW){//需要新建一个全新的构造函数,构造函数的参数是接收“原本主窗体” InitializeComponent(); //把“原本的主窗体”赋值给“声明的主窗体”。 kgw = KGW;} #endregionpublic delegate void newtable2(string textbox2);public newtable2 table2;private void New2()//多线程调用{ table2 = new newtable2(kgw.NewTable2); Thread th = new Thread(new ThreadStart(delegate { table2(textBox2.Text);//第一种invoke调用(可行) this.Invoke(table2, new object[] {textBox2.Text });//第二种invoke调用(可行) //两种inovke二选一执行 })); th.IsBackground = true; th.Start();}
主窗体代码:
第一种Invoke
public void NewTable2(string textBox2)//多线程调用{ sqlconnent co = new sqlconnent(); SqlConnection con = co.connent(); con.Open(); try { if (this.Created) { this.Invoke(new ThreadStart(delegate { string strselect = "select * from KeHuBiao where 客户名称 = '" + textBox2 + "'"; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(strselect, con); da.Fill(ds); this.dataGridView1.DataSource = ds.Tables[0]; })); } } catch (Exception ee) { MessageBox.Show(ee.Message.ToString()); } finally { con.Close(); }}
第二种Invoke
public void NewTable2(string textBox2)//多线程调用{ sqlconnent co = new sqlconnent(); SqlConnection con = co.connent(); con.Open(); try { string strselect = "select * from KeHuBiao where 客户名称 = '" + textBox2 + "'"; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(strselect, con); da.Fill(ds); this.dataGridView1.DataSource = ds.Tables[0]; } catch (Exception ee) { MessageBox.Show(ee.Message.ToString()); } finally { con.Close(); }}
总结:
重点:要两个窗体之间的关联性。
1 0
- 两个Form窗体之间的关联性问题<跨窗体数据同步>
- 通过事件同步两个窗体之间的数据
- 通过事件同步两个窗体之间的数据
- 两个Form之间传数值【两个Form窗体关闭第一个窗体的情况下】
- (Windows Form)两个打开的窗体之间相互调用。
- C#(WIN FORM)两个窗体间之间的相互操作
- 在两个不同的Form窗体中的DataGridView数据“传递”
- 关于两个窗体之间交换数据
- 窗体之间数据的传递
- 数据窗体向导创建窗体的问题
- 两个winform窗体之间的传值
- 两个窗体之间数值的传送!
- c# 两个窗体之间的传值
- 两个窗体之间的checkbox传递
- 两个Form之间用构造函数回传数值【两个Form窗体不关闭情况下】
- MDI窗体,子窗体之间的数据传递
- 窗体之间传递数据
- 同步更新子窗体的数据
- 树状数组原理及模板
- c++之类型萃取
- luogu1207双重回文数[usaco1.2]Dual Palindromes
- JavaScript Date对象
- nyoj 123 士兵杀敌(四)(树状数组)
- 两个Form窗体之间的关联性问题<跨窗体数据同步>
- Android Material Design之Toolbar与Palette实践
- Winsock IOCP模型(二) (转)
- Python学习笔记之七——模块
- 各种输入输出代码(供 研究)
- buildroot学习(四)——at91sam9g45软件平台更新
- Android与js交互
- 双缓冲与Java swing
- Torch7 学习笔记[1]