以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]统一设置所有窗口表样式的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=176997)

--  作者:昱飞哥
--  发布时间:2022/5/6 9:41:00
--  [求助]统一设置所有窗口表样式的问题
e.Table.Grid.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue   \'返回底层的C1.Win.C1FlexGrid.C1FlexGrid对象并设置其样式

为了实现统一设置所有窗口表样式,我将这行代码写到全局代码drawcell事件中,代码如下:
If e.Table.Current.index = e.Row.index Then
    If e.Table.Name.Contains("_")   \'如果当前绘制的表是窗口表
        \'\'\'\'\'\'\'\'\'\'\'\'这个方法可以改变所有窗口表的样式\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'
        \'e.Table.DataTable.AddUserStyle("背景", Color.Lime, Color.White)
        \'e.Style="背景"
        \'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'也可以这样\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'
        e.Table.Grid.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue   \'返回底层的C1.Win.C1FlexGrid.C1FlexGrid对象并设置其样式
    End If
End If

这样带来的问题是软件直接卡死。请教应该怎么办

--  作者:有点蓝
--  发布时间:2022/5/6 9:59:00
--  
这种用法不能放到drawcell。试试放到AfterLoadTableSetting事件
--  作者:昱飞哥
--  发布时间:2022/5/6 10:02:00
--  
这个事件在哪
--  作者:有点蓝
--  发布时间:2022/5/6 10:07:00
--  
只有表事件才有。或者放到项目事件的currenttablechanged
--  作者:昱飞哥
--  发布时间:2022/5/6 10:11:00
--  
可以了,蓝老师,那在currenttablechanged里面怎么实现当前选中的行背景变色
--  作者:有点蓝
--  发布时间:2022/5/6 10:16:00
--  
当前选中只能到drawcell事件处理。不同功能要到不同的事件处理。如果一个事件就能够解决所有的问题,又何必搞那么多事件
--  作者:昱飞哥
--  发布时间:2022/5/6 10:36:00
--  
我用比较简单的方式实现了:一键设置所有窗口表的样式和设置窗口表当前行的样式(背景颜色),分享一下:

1、新建一个自定义函数:FormTableSetStyle
自定义函数代码:

\'\'\'设置窗口表的样式和选中行的背景样式

Dim tbl As Table = Args(0)
If tbl.Name.Contains("_")  \'判断该表如果是窗口表
tbl.Grid.VisualStyle = C1.Win.C1FlexGrid.VisualStyle.Office2007Blue   \'返回底层的C1.Win.C1FlexGrid.C1FlexGrid对象并设置其样式
tbl.ListMode = True  \'整行突出
tbl.SysStyles("CurrentRow").BackColor = Color.Cyan  \'设置当前行背景颜色
End If

2、在全局代码CurrentTableChanged事件中进行调用:

Functions.Execute("FormTableSetStyle",e.Table)

3、如果要修改样式只要修改自定义函数就能全局生效。