
| 出版日期:1997-10-27 总期号:681 本年期号:41 |
|
建立浮动文本框
孙勇 网格控件是vb标准版和专业版中都有的一个定制控件。它提供类似于电子表格的输入、输出界面,在实际编程中经常运用。其主要缺点是:用户不能直接编辑网格中各单元的内容,这给实际运用造成了阻碍。但有两个简单的解决方法:①使用网格的keypress事件;②使用文本框与网格的联合(即本报1997年第27期《直接编辑vb网格控件项的方法》所介绍的两种方法:直接法和间接法)。这两种方法都有其优缺点。综合来讲,使用第二种方法(即文本框与网格联合)编程量小且易控制。那么怎样解决其影响屏幕布局、含义不清的缺点呢?答案是:建立浮动的文本框。 建立浮动文本框的工作原理是:用户修改一个单元时,把文本框(无边框)直接放到网格单元上,并使文本框可见。这个文本框与网格单元有相同的尺寸和形状,结果用户就像是直接编辑网格单元一样,但编辑实际是在文本框中进行的。这种方法的实现主要由两部分组成:显示文本框和识别用户编辑的意愿。以下是其编程实例: 1.显示文本框 在确定文本框的大小及显示位置时,必须考虑单元列的宽度、分隔线的粗度以及网格自身的上边沿和左边沿。 subshowtextbox() dimxasinteger,yasinteger dimcasinteger ′隐藏文本框 text1.visibleΚfalse ′设置文本框的高度、宽度 text1.heightΚgrid1.rowheight(grid1.row)-(screen.twipsperpixely 2) text1.widthΚgrid1.colwidth(grid1.col)-(screen.twipsperpixelx 2) ′计算显示位置的x轴 xΚgrid1.left+grid1.colwidth(0)+(screen.twipsperpixelx 2) forcΚgrid1.leftcoltogrid1.col-1 xΚx+grid1.colwidth(c)+screen.twipsperpixelx nextc ′计算显示位置的y轴 yΚgrid1.top+grid1.rowheight(0)+(screen.twipsperpixely 2) forcΚgrid1.toprowtogrid1.row-1 yΚy+grid1.rowheight(c)+screen.twipsperpixely nextc ′显示文本框 text1.leftΚx text1.topΚy text1.zorder text1.visibleΚtrue text1.setfocus endsub 2.识别单元编辑的意愿 ①编辑的开始 当发生以下任一情况时,单元编辑开始:———用户双击一个单元 ———用户按回车键 ———用户开始输入字母或数字 ′网格的keypress事件 subgrid1-keypress(keyasciiasinteger) dimcharasstring ifkeyasciiΚ13then′回车键 text1.selstartΚlen(text1.text) showtextbox else charΚchr$(keyascii)′其他键 text1.textΚchar text1.selstartΚ1 showtextbox endif endsub ′网格的dbclick事件 subgrid1-dbclick() ifgrid1.rowΛ0andgrid1.colΛ0thengrid1-keypress13 endsub ②编辑的结束 当发生以下任一情况时,单元编辑结束: ———用户按回车键或esc键 ———用户使用箭头从单元移开 ———用户单击另一个单元 ′文本框的keypress事件 subtext1-keypress(keyasciiasinteger) selectcasekeyascii case13′回车键 grid1.textΚtext1.text text1.visibleΚfalse grid1.setfocus case27′esc键 keyasciiΚ0 text1.visibleΚfalse grid1.setfocus endselect endsub ′文本框的keydown事件 subtext1-keydown(keycodeasinteger,shiftasinteger) selectcasekeycode case38′up text1-keypress13 sendkeys″{up}″ case40′down text1-keypress13 sendkeys″{down}″ endselect endsub ′网格的mousedown事件 subgrid1-mousedown(buttonasinteger,shiftasinteger,xassingle,yassingle) text1.visibleΚfalse endsub 3.文本框的内容 始终保持文本框的内容为最新的方法是使用网格的rowcolchange事件。当当前网格单元改变时,该事件过程把当前网格的内容装入文本框的text特性。 subgrid1-rowcolchange() text1.textΚgrid1.text endsub 前面实例在实际运用时可能有所不同,本文只是给读者提供利用浮动文本框编辑网格单元内容的基本思路。 |
|||||||||||||||||