一个窗体(类)调用另一个窗体(类)参数(窗体参数传递--包括控件)方法总结
大致分4种情况: 1.声明Static静态,有静态类、静态变量、内部静态属性等,通过声明static,我们可以直接用类名来访问; 例如:public static string abc;//form1中声明 在form2中则:Form1.abc 2.使用构造函数,通过窗体在另一个窗体中实例化时传递参数,然后赋予引用取得变量值,这种方式比较常见; eg:在Form1中:private string a; public Form1(string b){a=b;} 在Form2中:private string c;Form1 f1 = new Form1(c); 3.用公共属性或方法,实际上这也可以算是构造式,只有在不是static情况下,也要在窗体实例化后来引用; eg:在Form1中:private string a; public string A{ get{return a;} set{a=value;} } 在Form2中:Form1 f1 = new Form1(); f1.A;//引用 4.通过Application.OpenForms[index].Controls[index]遍历索引获取另一个窗体的控件,在一个窗体操纵另一个窗体控件中比较常用,下面以2个不同窗体操纵TreeView来说明: eg:在Form1中加入TreeView控件; 在Form2中: Form myform = Application.OpenForms["Form1"].FindForm(); TreeView tv = (TreeView)myform.Controls["treeView1"];//这样我们就获取到了Form1中的控件体 接着添加节点: 注意2个问题:1)操纵主窗体的进程会引起进程同步,所以我们要改成异步进程(Thread/委托事件); 2)调用Invoke/BeginInvoke,注意窗口句柄和参数是否合适; //下面使我们增加节点的操作代码 if (tv.IsHandleCreated) //增加节点委托 总之,窗体间引用会增加额外的线程(方式4),不必要的时候用构造函数是最比较好,方式选择依系统性能和个人爱好所定! 综合下,改用方式: private delevate void 委托(参数); private void 方法(参数) { if(控件.InvokeRequired) { 委托 abc = new 委托(方法); Invoke(abc,new object[]{参数}); } else { 控件:执行普通控件操作。 } } |
作者:jinqier
出处:http://www.cnblogs.com/jinqier/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。