这里只介绍方法,相关具体东西网上自己找下
1.窗体构造: 关于线程/窗体传参,比较简单的就是窗体构造,通过窗体构造,来向窗体传递窗体控件,我们以
Form1.DataGridView为例,实现效果为Form2执行刷新Form1.DataGridView的功能:
首先构造Form2的窗体函数,参数为DataGridView类型(当然你也可以传Form1的整个窗体,来实现更多的操作),这样
就可以将Form1.DataGridView为参数传递给Form2的刷新函数.
2.静态: 这里说的静态既有静态变量又有静态函数,首先我们从比较简单也比较投机的方法来介绍:
A:窗体激活事件+静态变量: 首先在[无关类]中声明一个静态变量,例如: public static bool WYH=false;
此时Form2如果要刷新Form1.DataGridView,那么在Form2的中``将WYH重新赋值,如:类名.WYH=true;
在Form1的Active事件中判断WYH的值``如果WYH==true;则执行Form1.DataGridView的刷新函数.
B:任意类刷新函数+静态: 在任意类中写刷新函数,Form1.DataGridView赋值给静态变量 public static
datagridview DGV,Form2中以DGV为参传递给类得刷新函数.
C:静态方法:自己写个刷新得静态方法就得了,Form2直接调用之.需要注意得是线程从属关系.
3.委托:很多初学者对这个东西都很忌讳,觉得有多么高深似得,其实很简单,使用一个委托就三步:声明,实例,调用
跟使用其他变量没有什么区别,一般委托经常跟线程和事件一起出没,要了解更多相关内容请在CSDN或者GOOGLE
上搜索一下,太多了``我就不作无谓得说明了.
需要注意得就是委托得直接调用和Invoke得区别,直接调用是基于子线程来运行,而Invoke会基于UI线程存在,这点在
做图形活着涉及带软件皮肤得程序时``需要特别注意,如果开子线程会丢失皮肤,开UI线程可能功能有区别,解决得办法
是分解函数,将需要重新对变量赋值或操作得``用子线程完成, 而UI线程则通过前面子线程得操作结果来动态刷新页
面.
说得是自己得经验,有不对得地方尽管指出,一定虚心改正.
发表于 @ 2007年06月08日 10:22:00|评论(loading...)|编辑