以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] 在全局表事件 DrawCell 中,这段代码怎么不执行呢? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=145755) |
-- 作者:龙潭春早 -- 发布时间:2020/2/6 17:24:00 -- [求助] 在全局表事件 DrawCell 中,这段代码怎么不执行呢? 一、之前,表不多、图片列也少,所以在两三个表的 DrawCell 事件中,加上了下面这段代码,一直使用正常: Select Case e.Col.Name Case "联系人照片" e.StartDraw If e.Row("联系人照片") > "" Then Dim Ls = e.Row.DataRow.Lines("联系人照片") If FileSys.FileExists(projectPath & "RemoteFiles\\" & Ls(0)) Then \'如果文件存在 e.Graphics.DrawImage(getimage(projectPath & "RemoteFiles\\" & Ls(0)), e.x + 5,e.y + 5, 90, 75) \' 绘制第一个图标 End If End If e.text = "" e.EndDraw Case "产品图片" e.StartDraw If e.Row("产品图片") > "" Then Dim Ls = e.Row.DataRow.Lines("产品图片") If FileSys.FileExists(projectPath & "RemoteFiles\\" & Ls(0)) Then \'如果文件存在 e.Graphics.DrawImage(getimage(projectPath & "RemoteFiles\\" & Ls(0)), e.x + 5,e.y + 5, 100, 75) \' 绘制第一个图片 End If End If e.text = "" e.EndDraw End Select 二、现在,表、图片列都多了,所以取消了在各个表中的代码,统一在全局表事件 DrawCell 中,加上了下面的代码。 但是不执行,什么原因呢? For Each dc As DataCol In e.Table.DataTable.DataCols If dc.ExtendType = ExtendTypeEnum.Images Then e.StartDraw If e.Row(dc.Name) > "" Then Dim Ls = e.Row.DataRow.Lines(dc.Name) If FileSys.FileExists(projectPath & "RemoteFiles\\" & Ls(0)) Then \' 如果文件存在 Dim strs As String = dc.Name If strs.Contains("照片") Then e.Graphics.DrawImage(getimage(projectPath & "RemoteFiles\\" & Ls(0)), e.x + 5,e.y + 5, 90, 75) \' 绘制第一个图标 ElseIf strs.Contains("图片") Then e.Graphics.DrawImage(getimage(projectPath & "RemoteFiles\\" & Ls(0)), e.x + 5,e.y + 5, 100, 75) \' 绘制第一个图标 End If End If End If e.text = "" e.EndDraw End If Next 【说明】之前没有加 Dim strs As String = dc.Name,直接使用的 dc.Name 因为代码不执行,才加了 strs 进行测试。 |
-- 作者:kylin -- 发布时间:2020/2/6 17:56:00 -- 项目事件Initialize加入代码: For
Each dt
As
DataTable
In
DataTables
dt.GlobalHandler.DrawCell = True Next |
-- 作者:有点蓝 -- 发布时间:2020/2/6 18:19:00 -- 启用全局表事件了吗?http://www.foxtable.com/webhelp/topics/0671.htm |
-- 作者:龙潭春早 -- 发布时间:2020/2/6 20:01:00 -- 之前,已经在项目事件 Initialize 中,打开了这个全局表事件(最后一个就是): \' 打开以下全局表事件( 11个 ) For Each dt As DataTable In DataTables dt.GlobalHandler.PrepareEdit = True \' 准备编辑单元格 dt.GlobalHandler.DataColChanged = True \' 列的内容被更改后执行 dt.GlobalHandler.DataRowAdding = True \' 数据行增加一行 dt.GlobalHandler.BeforeDeleteDataRow = True \' 准备删除数据行 dt.GlobalHandler.DataRowLockedChanging = True \' 锁定数据行之前 dt.GlobalHandler.BeforeMoveRow = True \' 准备移动行 dt.GlobalHandler.BeforeDragColumn = True \' 准备移动列 dt.GlobalHandler.BeforeFreezeColumn = True \' 准备冻结列 dt.GlobalHandler.BeforeResizeColumn = True \' 准备调整列宽 dt.GlobalHandler.BeforeResizeRow = True \' 准备调整行高 dt.GlobalHandler.DrawCell = True \' 准备绘制单元格 Next |
-- 作者:有点蓝 -- 发布时间:2020/2/7 11:40:00 -- 把表事件DrawCell里面的代码全部去掉(包括注释的,一个字符都不能留),如果表事件DrawCell有代码,就不会执行全局表事件DrawCell |
-- 作者:龙潭春早 -- 发布时间:2020/2/9 0:46:00 -- 按照楼上的要求做了,把所有表的 DrawCell 事件 里面的代码全部都去掉了。 但是,所有表都变成这样的了。 通常,我们的一个表有两三个图片列。 但是,这时候显示的图片顺序却没有什么规律性,不是前面列的图片一定排在前面。 为什么会这样呢? |
-- 作者:有点蓝 -- 发布时间:2020/2/9 22:06:00 -- 如果区分了列名,不可能会绘制到其它列去的。上传实例看看 |
-- 作者:龙潭春早 -- 发布时间:2020/2/26 19:55:00 -- 5楼的:把表事件DrawCell里面的代码全部去掉(包括注释的,一个字符都不能留),如果表事件DrawCell有代码,就不会执行全局表事件DrawCell。 这一条,是对所有的全局表事件都成立的吗? 也就是说: 1)如果要使用全局表事件,就必须把对应的表事件里面的代码全部去掉(包括注释的,一个字符都不能留)吗? 2)如果表事件有代码,就不会执行对应的全局表事件吗? [此贴子已经被作者于2020/2/26 19:57:42编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/2/27 9:43:00 -- 只有DrawCell事件会这样,A表DrawCell有代码,只影响A表全局事件,不会影响其他表全局事件。 其它表事件,会先执行表事件,再执行全局表事件,也就是都执行
|
-- 作者:龙潭春早 -- 发布时间:2020/2/27 17:02:00 -- 或者倒过来说,对于 DrawCell 事件: 如果使用了 全局表事件 中的 DrawCell,那么,对于所有的表,就不能使用 任何表事件 中的 DrawCell 了。 是吗?
[此贴子已经被作者于2020/2/27 17:02:13编辑过]
|