百里叶扬 发表于 2024-5-17 16:19:48

在c1flexgrid中画线,拖动滚动条时,绘制的线条串位

在c1flexgrid中绘制的线条,拖动横向滚动条时,超出控件范围绘制的线条就会串位,请问该如何解决呢?




Private Sub Fg_OwnerDrawCell(sender As Object, e As OwnerDrawCellEventArgs) Handles Fg.OwnerDrawCell

      With Fg

            e.Graphics.DrawLine(Pens.Red, .Cols(5).Left, .Rows(1).Top, .Cols(5).Left, .Rows(.Rows.Count - 1).Bottom)
            e.Graphics.DrawLine(Pens.Red, .Cols(10).Left, .Rows(1).Top, .Cols(10).Left, .Rows(.Rows.Count - 1).Bottom)
            e.Graphics.DrawLine(Pens.Red, .Cols(15).Left, .Rows(1).Top, .Cols(15).Left, .Rows(.Rows.Count - 1).Bottom)
            e.Graphics.DrawLine(Pens.Red, .Cols(18).Left, .Rows(1).Top, .Cols(18).Left, .Rows(.Rows.Count - 1).Bottom)
      
      End With

    End Sub

Richard.Ma 发表于 2024-5-17 16:19:49

OwnerDrawCell本意上是为了渲染当前的单元格,在每个单元格需要渲染的时候都会触发。
e里面就是包含了要渲染的单元格的相关信息
相关位置也应该是通过e.Bounds来获取

按照你的代码,你是想去设置5,10······这些列的左边框,应该这样写

            If e.Col = 5 Then
                e.Graphics.DrawLine(Pens.Red, e.Bounds.Left, e.Bounds.Top, e.Bounds.Left, e.Bounds.Bottom)
            ElseIf e.Col = 10 Then
                e.Graphics.DrawLine(Pens.Red, e.Bounds.Left, e.Bounds.Top, e.Bounds.Left, e.Bounds.Bottom)
            End If

Richard.Ma 发表于 2024-5-17 18:40:45

麻烦提供一个复现问题的demo,我们来协助调查一下原因

百里叶扬 发表于 2024-5-18 08:44:16


百里叶扬 发表于 2024-5-18 08:48:20

两张图片,下边的是正常加载后的,上边的是移动横向滚动条后的样式

Richard.Ma 发表于 2024-5-20 12:30:28

收到,调查后会回回复结果

百里叶扬 发表于 2024-5-20 16:45:55

Richard.Ma 发表于 2024-5-20 12:30
收到,调查后会回回复结果

好的,谢谢

百里叶扬 发表于 2024-5-21 14:13:01

Richard.Ma 发表于 2024-5-21 10:15
OwnerDrawCell本意上是为了渲染当前的单元格,在每个单元格需要渲染的时候都会触发。
e里面就是包含了要渲 ...

太感谢了,问题解决了:victory:

Richard.Ma 发表于 2024-5-21 18:23:50

不客气
页: [1]
查看完整版本: 在c1flexgrid中画线,拖动滚动条时,绘制的线条串位