首先,我用的是net。 但我知道net 也是基于基础的消息循环的。 其实,我大概知道,是通过windows操作系统的消息循环,向窗口发送消息,然后由执行相应的绘制的代码。 只是,我现在比较困惑的是两点。 一: 消息是一层一层的发送的,还是直接发送的。
比如: 一个窗口Form1,(我习惯叫窗体), 上面有几个控件。button,textbox,或者还有其他的控件。
当此窗体form1的某部分需要重绘时,比如,某个控件被挡住了, 或控件发生其他的单击啊 或者程序控制的一些事件了。
是操作系统先将消息发到窗体,然后窗体再发到控件呢,还是操作系统直接就发到控件,然后控件自己执行自身的绘制代码就ok了。 二 控件与所属的窗体的 关系怎么看,影响控件的显示吗? 其实,从我试验的角度,应该是影响的。但是我就是没搞明白问题在哪。 问题的核心是涉及到两个 一个是继承,一个是controls 集合属性。 1 比如 我拖一个窗体,然后往上面再拖几个控件,那么这时候,运行没问题。正常显示。
看自动生成的代码,
窗体是class form1:form 而控件 都是form1的 private 私有 字段。 然后在构造函数中 实例化那些字段--控件并添加到form1实例的controls集合中。
但,如果我再设计一个类 class form2:form1 那么,在form1中有的那些控件,将无法显示,运行还会报错。 2 如果 ,仍然是form1。
我添加一个控件 grid。然后,把一个控件比如button, 通过代码添加到grid.controls集合中。那么,显示仍然正常。 所以,不清楚这个控件类在哪声明变量(作为哪一个类的字段),然后,在哪实例化(有可能在窗体的构造函数,也有可能在某个控件的构造函数),添加到那个窗口或控件实例的controls属性,到底是起到什么作用。区别在哪。
比如: 一个窗口Form1,(我习惯叫窗体), 上面有几个控件。button,textbox,或者还有其他的控件。
当此窗体form1的某部分需要重绘时,比如,某个控件被挡住了, 或控件发生其他的单击啊 或者程序控制的一些事件了。
是操作系统先将消息发到窗体,然后窗体再发到控件呢,还是操作系统直接就发到控件,然后控件自己执行自身的绘制代码就ok了。 二 控件与所属的窗体的 关系怎么看,影响控件的显示吗? 其实,从我试验的角度,应该是影响的。但是我就是没搞明白问题在哪。 问题的核心是涉及到两个 一个是继承,一个是controls 集合属性。 1 比如 我拖一个窗体,然后往上面再拖几个控件,那么这时候,运行没问题。正常显示。
看自动生成的代码,
窗体是class form1:form 而控件 都是form1的 private 私有 字段。 然后在构造函数中 实例化那些字段--控件并添加到form1实例的controls集合中。
但,如果我再设计一个类 class form2:form1 那么,在form1中有的那些控件,将无法显示,运行还会报错。 2 如果 ,仍然是form1。
我添加一个控件 grid。然后,把一个控件比如button, 通过代码添加到grid.controls集合中。那么,显示仍然正常。 所以,不清楚这个控件类在哪声明变量(作为哪一个类的字段),然后,在哪实例化(有可能在窗体的构造函数,也有可能在某个控件的构造函数),添加到那个窗口或控件实例的controls属性,到底是起到什么作用。区别在哪。
解决方案 »
- 处理datatable 数据问题
- 在WinForm中如何设置选项卡倒置
- 如何隐藏gridview被选中的checkbox
- 数据库连接字符串的 Data Provider 如何传给一个 SqlConnectionStringBuilder
- 求一匹配负数的正则表达式
- 在Compact Framework中,如何标识一个控件??
- Ext.Panel中定时刷新图片发生闪烁的问题
- 关于socket监听端口获取远程计算机发来信息的问题,我郁闷啊!请指教
- C#中向Graphics输出String的问题。
- 急!谁有比较好的公式解析器程序给发一个
- 如何得到表的最后10条记录?每条记录没有编号哦
- 一个rgb 颜色问题
如果一个控件有Handel的话,也就是C++里面的hWnd就可以直接接收来自系统的消息 如果挡住了窗体和上面的几个控件,系统会直接发送消息到窗体和每个控件的,不会中转
如果根据无效区域的理解来看的话,那么就可以理解为控件被挡住了,有个无效区域了,那么这个控件应该会自动重绘,控件的重绘应该与外面的载体FOrm无关,毕竟控件就是一个比较特殊的form。
非要说消息机制的话,我个人认为系统在出现控件的无效区域之后,使用的是sendmessage直接发送到控件,而不是使用那个postmessage发送到窗体的消息队列中。2.继承的问题,首先form1中的控件是form1的私有变量,你用form2继承form1,你怎么调用父类的私有变量??这肯定是有问题的嘛。gird控件是你在form中申明的变量(控件对象),那么这个gird就属于form1,然后你添加一个button到gird的控件类中,那么button就属于gird的控件了。
你show窗体的时候,form1显示gird,而gird显示他自己的控件button,我实在没弄明白你是在什么地方弄糊涂了。
其实gird是个控件也是个窗体,你这样做的话,就好比在form1窗体中你建立了一个form对象form2,在form2中你建立一个button,在你显示form1的时候,你再显示form2,form2中有button,这样有问题吗?你将控件也看成窗体好了。