一般VB作界面大多属于以下几种情况:http://www.shengfang.org控件分开布局,不重叠;使用SSTAB控件分开重叠的控件;用FRAME等控件作为容器,用VISIBLE控制分别显示。 可是昨天我却遇到了这种情况: 界面需要显示、编辑一个数据库的表,http://www.shengfang.org我在工程1中开始进行测试,比较使用DBGRID、LISTVIEW以及MSFLEXGID控件的显示效果。我先添加了这三种控件,经过一番比较,觉得还是MSFLEXGRID控件比较友好,虽然它不能进行编辑,但是我记得在MSDN中有过这方面的例子,网上也很多这种例子,就是通过动态移动一个TEXTBOX控件完成编辑功能。于是我又放置了一个TEXTBOX控件,经过一番调试,简化了部分代码完成了http://www.shengfang.org这项功能。 代码如下: Private Sub MSFlexGrid1_Click() Private Sub text1_LostFocus() 以上http://www.shengfang.org代码非常简单,不多做解释了。 1、许多例子使用的是EnterCell或者KEYPRESS事件中显示TEXTBOX和LeaveCell事件中更新数据,隐藏TEXTBOX,但是根据我的调试,发现当使用ENTERCELL事件时,第一次第一个网格总是不能点击激活,因为该事件是指示当前活动单元更改到一个不同单元时发生,而MSFLEXGRID获得焦点后,默认活动单元就是第一个网格了;至于使用KEYPRESS事件,如果界面上不止一个控件,还是得先用鼠标点击激活MSFLEXGRID控件,用户再敲一个按键似乎有http://www.shengfang.org点多余;使用LEAVECELL事件时,如果先在编辑状态,然后用鼠标调整MSFLEXGRID控件的网格大小,此时TEXTBOX仍然显示并大小固定,与网格不匹配,所以使用TEXTBOX的LOSTFOCUS事件,一旦TEXTBOX失去焦点,立即更新数据并隐藏,以避免界面不美观。 2、定义变量I,J保存MSFLEXGRID控件的行、列并不是多余的,如果你用MSFlexGrid1.Text = text1.Text代码代替MSFlexGrid1.TextMatrix(j, i) = text1.Text就能够非常明显得看到差别:明明我在上一网格更改了内容,点击到下一网格后,http://www.shengfang.org上一网格的内容没有改变,而当前网格上显示的TEXTBOX内容却是更改的上一网格的内容,这时因为先点击MSFLEXGRID控件,当前激活的网格已经切换了,这时再激发LOSTFOCUS事件更新内容自然不匹配了。至于判断为0不执行更新,那时因为我需要显示一些固定表头内容,如果不作判断,会把表头也更新了。 经过一番调试,觉得使用MSFLEXGRID控件没有什么问题了,我就打开我的工作工程,准备增加新的功能模块。 先添加一个TEXTBOX控件,http://www.shengfang.org然后添加新部件,添加一个MSFLEXGRID控件,界面布局、添加代码,运行,这下完蛋了,无论怎么样点击鼠标,就是看不见TEXTBOX了,我以为是控件属性问题,因为我在调试时更改了MSFLEXGRID一些属性,逐个对比设置成一致,仍然不行;删除控件,重新添加,还是不行,我从测试工程拷贝MSFLEXGRID控件过来就一切正常,正常添加就是不成功,但是明明TEXTBOX位置已经移动过去了,就是不显示出来。 我又重新新建一个测试工程,http://www.shengfang.org随便放了一个TEXTBOX,又放了一个MSFLEXGRID盖在上面,依然如故,难道真的不行了,我无意识的按着“CTRL+X”、“CTRL+V”,想如果实在不行,就用LISTVIEW算了,按下F5最后运行一次,随便点击了一个网格,居然又可以了,天啊!什么毛病!我仔细观察界面,发现原来被盖住的TEXTBOX这次显示在上面,不再盖住了。这下恍然大悟了。原来我开始作测试时,因为比较显示效果,先添加的MSFLEXGRID,而后来我因为方便,先加了TEXTBOX,两者地差异导致界面上两个控件的顺序不一样。 VB的菜单格式-顺序,http://www.shengfang.org以前倒是用来调试多层界面层叠布局,可以把盖在下面的控件移动到最上面来或者相反,当时还查了一下MSDN,认识了相应的ZORDER方法(大部分控件都会有这个方法,可是用的最少的估计也是它了),http://www.shengfang.org由于我一次只需要显示一层,所以也没有留意,这次可是被它害惨了。 最后得出三个解决方法: 1、格式-顺序,把TEXTBOX移至顶层,http://www.shengfang.org或者把MSFLEXGRID移至底层,保证TEXTBOX在最上面。 字体:大 中 小 |
![]() | 永久地址 http://www.shengfang.org/blog/p/MSFLEXGRIDeditZORDER.php |
![]() | 引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1110691197 |
2005年3月13日13:19星期日 [Dev开发]





