Foxtable(狐表)用户栏目专家坐堂 → 单元格标色


  共有2557人关注过本帖树形打印复制链接

主题:单元格标色

帅哥哟,离线,有人找我吗?
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/5/11 10:36:00 [显示全部帖子]

g.MeasureString就是用来计算要打印的字符的宽度的


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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/5/11 13:46:00 [显示全部帖子]

上传具体实例测试

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/5/11 14:57:00 [显示全部帖子]

新建项目做个类似的例子

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/5/11 17:24:00 [显示全部帖子]

If e.Row.IsNull(e.Col.Name) = False Then
    e.StartDraw()
    Dim cval As String = e.Row(e.Col.Name)
    e.text = ""
    Dim arr() As String = cval.Split(",")
    Dim lst As new List(of String)
    Dim g As Graphics = e.Graphics
    Dim fnt = New Font("微软雅黑", e.Table.Font.Size)
    For Each s As String In arr
        Dim h As String =  IIF(s.Contains("(已)"),"$$",IIF(s.Contains("(未)"),"@$",""))
        s = s.Replace("(已)", "").Replace("(未)", "")
        Dim w1 As Integer = g.MeasureString(s, e.Table.Font).Width
        If w1 > e.Width
            Dim k1 As Integer = Math.Floor(s.Length * ( e.Width / w1))
            Dim i2 As Integer = 0
            Do While i2 < s.Length
                Dim s2 As String = ""
                If i2+k1<s.Length-1
                    s2 = s.SubString(i2,k1)
                Else
                    s2 = s.SubString(i2)
                End If
                i2 = i2+k1
                lst.Add(h & s2)
            Loop
        Else
            lst.Add(h & s)
        End If
    Next
    Dim x As Integer = e.x + 1
    Dim y As Integer = e.Y + 1
    Dim idx As Integer = 0
    Dim h1 As Integer = g.MeasureString("A", e.Table.Font).Height
    For Each s As String In lst
        If s.StartsWith("$$") Then
            g.DrawString(s.SubString(2), e.Table.Font, Brushes.Gray, x, y)
        ElseIf s.StartsWith("@$") Then
            g.DrawString(s.SubString(2), e.Table.Font, Brushes.Blue, x, y)
        Else
            g.DrawString(s, e.Table.Font, Brushes.Black, x, y)
        End If
        y = y + h1 + 1
    Next
End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/5/11 17:43:00 [显示全部帖子]

看懂理解代码逻辑在用。

代码其实就是根据列宽计算一行可以画几个字符,然后拆分到集合里

 回到顶部