数据窗口中回车键的完整编程.doc_第1页
数据窗口中回车键的完整编程.doc_第2页
数据窗口中回车键的完整编程.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据窗口中回车键的完整编程 下面的脚本在数据窗口的PBm_dwnprocessenter用户事件中编写,用来检查数据窗口中录入数据的各种情况,并执行相应的程序。1、当返回负值时肯定某列存在错误,这时既不处理Enter键也不处理Tab键。2、当返回非负值时如果是最后的行列则应该在按回车键时插入一行,并使光标定位到新行的第一列上。如果不是最后行列则应该发送Tab信息,屏蔽Enter键的处理。脚本如下:If This.AcceptText() 0 Then /如果不能正确接受用户的输入信息Return 1 /则不进行按键处理,直接返回End IfIf This.GetColumn()=Long(dw_1.Object.DataWindow.Column.Count) Then /如果是最后一列If This.GetRow() = This.RowCount() Then /并且是在最后一行This.InsertRow(0) /则增加新行This.ScrollToRow(This.GetRow() + 1) /并且使之成为当前行This.SetColumn(1) /并将第一列设置为当前列Return 1 /然后返回End IfEnd IfSend(Handle(This),256,9,Long(0,0) /发送处理Tab键的消息Return 1/忽略回车键的处理 关于用enter键代替Tab键的方法看到大家很多人都问如何用enter键代替tab键的方法,而大家的回答几乎都是一个,那就是在数据窗口上自定义一个事件ID为pbm_dwnprocessenter的事件,然后在事件上写上以下代码:send(handle(this),256,9,long(0,0)return 1其实,如果大家好好看看PB的帮助就会发现,这个pbm_dwnprocessenter事件,只响应一个回返值return 0,对于return 1根本就不起作用!对于Grid类型的数据窗口,当有多行并且当前行不是最后一行时,就会出现按了回车键,系统会自动执行换行的操作,并不会因为加了一个return 1 而不执行PB的默认操作。经过大量的试验,我找到了一个并不完美的解决方法:1、在窗口上放一个按钮,设置按钮的default属性为true,设置visible属性为FALSE2、在这个按钮上执行模拟tab键的代码: send(handle(dw_1),256,9,long(0,0)这样就OK了,原理嘛就是,当按enter键后,系统不再执行默认的换行操作,而是触发了那个按钮的clicked事件,这样再模拟出一个tab键,就能完美的用enter执行tab的功能了。说这个方法不是完美的是因为如果你的窗口必须有一个按钮为default按钮完成其他的功能时就不好办了,但我想这样也是一个不错的方法。 另一种方法通常要实现Enter键跳转焦点都是通过模拟Tab键来完成,但是如果有列的高度较高时(可以输入两排以上的串),这种方法不能正常跳转。以下是实现Enter键跳转焦点的又一种方法:/*function: of_tabaccess: publicdescription: 跳转焦点argument: nonereturn value: integer1, 成功2, 焦点丢失-1, 失败author: 左手无名指date: 2004-05-14*/integer li_net = -1long i, j, ll_tab, ll_coltab, ll_colif this.getrow() = 0 or this.getcolumnname() = then return -1ll_tab = long(this.describe(this.getcolumnname() +.tabsequence)if ll_tab = 0 then return -1for i = 1 to long(this.describe(datawindow.column.count)if ll_tab ll_coltabj thenll_tab = ll_coltabill_coltabi = ll_coltabjll_coltabj = ll_tabll_tab = ll_colill_coli = ll_coljll_colj = ll_tabend ifnextli_net = this.setcolumn( ll_coli)if li_net = 1 then exitnextif li_net = 1 thenlong ll_x, ll_width, ll_pos, ll_maxposll_x = long(this.describe(#+ string(ll_coli) +.x)ll_width = long(this.describe(#+ string(ll_coli) +.width)ll_maxpos= long(this.describe(DataWindow.HorizontalScrollMaximum)if (ll_x + ll_width) this.width thenll_pos = min(ll_maxpos, ll_width + ll_x -

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论