以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  单元格标色  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=134873)

--  作者:blackzhu
--  发布时间:2019/5/11 10:15:00
--  单元格标色
下面这段代码是有点甜在论坛的例子:

 If e.Row.IsNull(e.Col.Name) = False Then
                            e.StartDraw()
                            Dim cval As String = e.Row(e.Col.Name)
                            e.text = ""
                            Dim g As Graphics = e.Graphics
                            Dim fnt = New Font("微软雅黑", e.Table.Font.Size)
                            Dim x As Integer = e.x + 1
                            Dim y As Integer = e.Y + 1
                            Dim idx As Integer = 0
                            Do While idx > -1
                                idx = -1
                                Dim val As String = ""
                                Dim v = "(未)"
                                Dim i = cval.IndexOf(v)
                                If i > -1 Then
                                    If idx = -1 Then
                                        idx = i
                                        val = v
                                    ElseIf i < idx Then
                                        idx = i
                                        val = v
                                    End If
                                End If
                                If idx > -1 Then
                                    Dim temp As String = cval.Substring(0, idx)
                                    g.DrawString(temp, e.Table.Font, Brushes.Blue, x, y)
                                    x += g.MeasureString(temp, e.Table.Font).Width - 3
                                    Output.Show(val)
                                    \'  g.DrawString(val, fnt, Brushes.Red, x, y)
                                    \' x += g.MeasureString(val, fnt).Width - 1
                                    cval = cval.Substring(idx + val.Length)
                                End If
                            Loop
                            cval = cval.Replace("(已)", Nothing)
                            g.DrawString(cval, e.Table.Font, Brushes.Gray, x, y)
                            e.EndDraw()

原先的内容我已经用自动行高全部展示出来.但是这段代码是用画板将原先的内容画出来了的,因为内容超出了单元格的长度,所以画出来的内容跟相邻的单元格内容重叠. 我怎样修改这个代码可以做到跟原先的内容一样,在本单元格显示出来(也就是换行)

--  作者:有点蓝
--  发布时间:2019/5/11 10:36:00
--  
g.MeasureString就是用来计算要打印的字符的宽度的


自动行高后,根据列宽计算一下一列能够打印几个字符,然后拆分为多行打印

--  作者:blackzhu
--  发布时间:2019/5/11 12:33:00
--  
这个怎么找不到帮助的?
--  作者:blackzhu
--  发布时间:2019/5/11 13:26:00
--  
能否帮我改一个代码?
--  作者:有点蓝
--  发布时间:2019/5/11 13:46:00
--  
上传具体实例测试
--  作者:blackzhu
--  发布时间:2019/5/11 14:26:00
--  
没有办法上传,这个是具体项目,项目非常大. 而且数据都是动态生成的.  我只想你按照这个代码帮我改改


--  作者:有点蓝
--  发布时间:2019/5/11 14:57:00
--  
新建项目做个类似的例子
--  作者:blackzhu
--  发布时间:2019/5/11 16:15:00
--  
单元格数据是  A(已),B(已),C(未)

我要的格式就是

A   已   需要灰色表示,并清除已标记
B   已  需要灰色表示,并清除已标记
C   未  需要蓝色表示,并清除未标记

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:判断字符和列宽.table





--  作者:blackzhu
--  发布时间:2019/5/11 16:16:00
--  
最终结果

A 灰色字
B   灰色字
C  蓝色字

--  作者:blackzhu
--  发布时间:2019/5/11 16:21:00
--  
这个能说明问题,上面的例子数据有点规范的,看这个

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:判断字符和列宽.table