关于Grid表格控件不支持回车响应的替代方案
在grid表格控件上面如果某个表格设置为string则在用户编辑后回车无响应,必须点击其他表格触发selectchange才能触发函数的替代方案是:在该string表格上面添加一个editbox控件,利用editbox的editchange事件来响应编辑,虽然稍麻烦一点,需要做动态添加和删除,但是效果比原来的文字编辑功能强大很多.
目前该事件建议已经提交给作者 不知道什么时候能采纳更新. 猫老师有没有专门的odcl教材啊,你的淘宝上? 老猫具体是怎么实现的
能发个范例吗
实验了好久没成功啊
一个是卡在无法设置文本编辑控件覆盖选定的表格
另一个是选定表格后的“焦点”不能转移 详细说明一下
请老猫看看思路方面哪里存在问题
第一个问题
点击grid的某一个表格
如果表格本身没有出现滚动条
或者滚动条在顶部的时候
鼠标点击表格时
可以控制textbox控件完全覆盖选定的表格
滚动条不在顶部时
通过获取鼠标的实时位置
也能计算得到选定表格的“区域”
从而改变textbox以覆盖表格
但是当滚动条滑动时
因为textbox控件是“静止”的
所以选定的表格就显露了出来
这个问题严格来说
可以通过限制grid的行数不让滚动条出现来解决
遇到的第二个问题
当鼠标已经选定表格进入编辑模式以后
无法将焦点转移
这才是最头疼的地方
不能进入textbox进行编辑
其它的一切都无从谈起 本帖最后由 masterlong 于 2015-10-11 14:41 编辑
ok
终于解决了焦点转移的问题
(defun c:ystm/ystm/预设列表#OnSelChanged (Row Column /)
(if (and (= row -1) (= column -1)) ;;注1
()
(progn
..... ;;注2
(dcl-Grid-SetCurCell ystm/ystm/预设列表 -1 -1) ;;注3
(dcl-Control-SetBackColor ystm/ystm/隐藏文本编辑控件 2)
(dcl-Control-SetText ystm/ystm/隐藏文本编辑控件 "1234567")
(dcl-TextBox-SetSel ystm/ystm/隐藏文本编辑控件 2 5)
)
)
)
注1
if语句在之前不成功代码中是不存在的
不成功的代码只有progn内的语句但不包括“注3”
注2
省略号代表的是控制textbox控件覆盖选定单元格的代码
注3
我注意到在以前的某个程序里
在grid中可以将焦点在不同的单元格之间进行切换
于是想到如果将焦点设置到(-1 -1)单元格会出现什么情况
实验之后发现
增加“注3”之后的程序得到了执行
并且焦点从grid转移出去了
但同时出现“错误: 参数值错误: 非负: -1”的错误提示
经过分析得到如下判断:
“注3”语句本身是可以正确执行的
“注3”之后的语句也没有错误
这样唯一可能出错的地方就只有“注2”了
首先“注2”在row、column不等于-1的情况下执行了一次
然后是“注3”执行
这时又触发了一次OnSelChanged事件
而这一次事件被安排在第一次事件完全结束以后
第2次事件中row=column=-1不符合“注2”的参数要求
于是出现了错误提示
根据以上判断增加了if语句
实验结果符合预期
至此grid焦点转移的问题得到解决
由此也说明一点
以前不成功的代码中焦点实际也转移了
但是odcl的运行机制又将焦点“拉”了回来
导致看起来“焦点无法转移”
不知道老猫具体是怎样处理的
或许压根不需要这样“曲线救国”
有空的时候介绍一下呀
通过对odcl提供的范例的研究
发现odcl的grid其实是可以实现回车响应的
但是设置并不是直接在grid中进行
而是在form中实现
具体方式如下
form属性中设置OnCancelClose事件
(defun c:ystm/Form1#OnCancelClose (Reason /)
(dcl_Grid_CancelCellEdit ystm/form1/格1)
(/= Reason 1)
)
这样在grid中输入回车就可以结束编辑
此时“焦点”停留在当前“表格”
需要注意的是
事件代码中最后一句(/= Reason 1)是必须的
原因是odc需要根据事件的返回值作不同的处理
说一句个人的看法
这种方式确实实现了回车相应
但还是有局限性的
因为只有模式和无模式窗体可以设置OnCancelClose事件
其它的窗体如control bars没有该事件
有没有类似的方法
也可以在control bars得到回车响应呢
没试过估计很可能是不行
在上一贴里采用的方式
再搭配textbox控件中的键盘监视事件
现在可以支持“↑↓ Tab”
跟excel一样方便
最重要的是不受窗体类型的限制
等有时间做一个完整的范例
放上来供大家参考 masterlong 发表于 2015-10-21 13:08 static/image/common/back.gif
通过对odcl提供的范例的研究
发现odcl的grid其实是可以实现回车响应的
但是设置并不是直接在grid中进行
厉害,可惜Palettes没有ONCANCELCLOSE事件 masterlong 发表于 2015-10-21 13:08 static/image/common/back.gif
通过对odcl提供的范例的研究
发现odcl的grid其实是可以实现回车响应的
但是设置并不是直接在grid中进行
请问Grid中的单元格如何才能编辑吗?我只有在偶尔情况下能编辑,但找到不到规律
(dcl_Grid_SetCellStyle YTMgcbz_Form1_grid1 i 0 6)
我设置的是文字类型
页:
[1]