Foxtable(狐表)用户栏目专家坐堂 → 有个BUG 我不知道官方会不会修复?


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

主题:有个BUG 我不知道官方会不会修复?

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


加好友 发短信
等级:三尾狐 帖子:760 积分:4714 威望:0 精华:0 注册:2011/12/17 18:37:00
有个BUG 我不知道官方会不会修复?  发帖心情 Post By:2014/6/8 12:14:00 [只看该作者]

首先帮助的这个请修改:

If e.Col.Name = "进度" AndAlso e.Row.IsNull("进度") = False Then
e.StartDraw()

Dim
Width As Integer = (e.Width - 2 )* e.Row("进度") \ 100
If e.Row("进度") = 100 Then
e.Graphics.FillRectangle(Brushes.Green,e.x +
1,e.y + 1, Width, e.Height - 2)
Else

e.Graphics.FillRectangle(Brushes.Red,e.x +
1,e.y + 1, Width, e.Height - 2)
End
If
e.EndDraw()

End
If

  这边的 Width 应该是 e.width  

帮助的主题:  在单元格中直接绘图



  是这样的 我发现一个错误 这个错误检查了很久都没有检查出来,今日上午无意发现.

  我在窗口表的表事件中的这个事件(DrawCell事件)放入下面这段代码:

If e.Row.Equals(e.Table.Current) Then
    e.StartDraw()
    Dim _GradientBrush As System.Drawing.Drawing2D.LinearGradientBrush
    _GradientBrush = New System.Drawing.Drawing2D.LinearGradientBrush(e.Bounds, Color.Green, Color.White, 90)
    'e.Graphics.FillRectangle(e.Col._GradientBrush, e.Bounds.X + 2, e.Bounds.Y + 2, x, e.Bounds.Height - 4)
    e.Graphics.FillRectangle(_GradientBrush, e.X + 2, e.Y + 2, e.Width - 3, e.Height - 4)
    e.EndDraw()
End If
 这个代码可以将当前行直接绘制成一个2D渐变的颜色.

 然后做了一个按钮,按钮的代码是:

 Tables(e.form.Name & "_Table1").AutoSizeCols()    '窗口表所有列 自动列宽


结果一个错误发生:

.NET Framework 版本:2.0.50727.5448
Foxtable 版本:2014.5.12.1
错误所在事件:表,窗口1_Table1,DrawCell
详细错误信息:
调用的目标发生了异常。
矩形“{X=0,Y=0,Width=0,Height=0}”的宽度或高度不能等于零。

*************************************************************************************************************************
为了检测这个错误,我将帮助的这句代码放入绘制事件:

If e.Row.Equals(e.Table.Current) Then
    e.StartDraw()
   
e.Graphics.FillRectangle(Brushes.Green,e.x + 1,e.y + 1, e.Width, e.Height - 2)
    e.EndDraw()
End If

但是按钮执行且没有发生问题.



我想问的是同样的是采取了GDI+的做法 为啥会有这个错误产生?


 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:多表统计.table
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:数据源.rar


[此贴子已经被作者于2014-6-8 12:18:17编辑过]

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


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2014/6/8 13:16:00 [只看该作者]

这不算bug

 

 

使用默认行高和列宽时,显示的是 0,所以你要预先进行处理

 

 

DrawCell

 

 

If e.Row.Equals(e.Table.Current) Then
    e.StartDraw()
    Dim Width As Integer = e.Width
    If Width = 0 Then width = e.Table.DefaultColWidth
    Dim Height As Integer = e.Height
    If Height = 0 Then Height = e.Table.DefaultRowHeight
    Dim  Bounds As System.Drawing.Rectangle = new System.Drawing.Rectangle(e.Bounds.x,e.Bounds.y,Width,Height)

    Using _GradientBrush As New System.Drawing.Drawing2D.LinearGradientBrush(Bounds, Color.Green, Color.White, 90) 
        e.Graphics.FillRectangle(_GradientBrush, e.X + 2, e.Y + 2, Width - 3, Height - 4)
    End Using
    e.EndDraw()
End If

[此贴子已经被作者于2014-6-8 13:25:05编辑过]

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


加好友 发短信
等级:三尾狐 帖子:760 积分:4714 威望:0 精华:0 注册:2011/12/17 18:37:00
  发帖心情 Post By:2014/6/8 14:08:00 [只看该作者]

加多一个默认判断? 我测试下
[此贴子已经被作者于2014-6-8 14:08:33编辑过]

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


加好友 发短信
等级:三尾狐 帖子:760 积分:4714 威望:0 精华:0 注册:2011/12/17 18:37:00
  发帖心情 Post By:2014/6/8 14:11:00 [只看该作者]

测试没有问题了

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


加好友 发短信
等级:三尾狐 帖子:760 积分:4714 威望:0 精华:0 注册:2011/12/17 18:37:00
  发帖心情 Post By:2014/6/8 15:17:00 [只看该作者]

If e.Row.Equals(e.Table.Current) Then
    e.StartDraw()
    If  e.Bounds.IsEmpty = False Then
        Dim _GradientBrush As System.Drawing.Drawing2D.LinearGradientBrush
        _GradientBrush = New System.Drawing.Drawing2D.LinearGradientBrush(e.Bounds, Color.Green, Color.White, 90)
        'e.Graphics.FillRectangle(e.Col._GradientBrush, e.Bounds.X + 2, e.Bounds.Y + 2, x, e.Bounds.Height - 4)
        e.Graphics.FillRectangle(_GradientBrush, e.X + 2, e.Y + 2, e.Width - 3, e.Height - 4)
    End If
    e.EndDraw()
End If

 直接判断下应该也可以

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


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2014/6/8 15:28:00 [只看该作者]

 

 

这样的确 更好 


 回到顶部