调用非托管DLL中的函数后DataGrid的OnPaint方法系统报"溢出错误。"

langmafeng 2005-03-29 03:00:21
在代码中调用了一个非托管DLL中的函数之后系统"溢出错误。",调试的时候发现问题出在DataGrid.OnPaint(PaintEventArgs pe)方法中,发现调用该方法时,pe.Graphics.ClipBounds的值变成了{X=NaN Y=NaN Width=NaN Height=NaN},但我不知道这些NaN是怎么产生的,现在我暂时重载了OnPaint方法:
protected override void OnPaint(PaintEventArgs e)
{
try
{
if (!Single.IsNaN(e.Graphics.ClipBounds.Left) &&
!Single.IsNaN(e.Graphics.ClipBounds.Top) &&
!Single.IsNaN(e.Graphics.ClipBounds.Width) &&
!Single.IsNaN(e.Graphics.ClipBounds.Width))
{
base.OnPaint (e);
}
}
catch(Exception ex)
{
throw ex;
}
}
把这个问题给绕过去了,但毕竟是治标不治本的方法,不知道大家有没有遇到过类似的问题,请帮忙分析分析问题可能出在什么地方,谢谢!
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
langmafeng 2005-04-04
  • 打赏
  • 举报
回复
up
langmafeng 2005-04-01
  • 打赏
  • 举报
回复
up
langmafeng 2005-03-31
  • 打赏
  • 举报
回复
up
haibuo1981 2005-03-29
  • 打赏
  • 举报
回复
只知道NaN在java中是意思是“不是一个数值”或“没有意义的表达式的返回值”,可能你在得到X,Y,Width,Height的值的时候出了问题。
没能从楼主给出的代码中看出原因所在。
langmafeng 2005-03-29
  • 打赏
  • 举报
回复
RectangleF 结构的Left和Top是可以小于0的,这个不是问题的关键所在
3tzjq 2005-03-29
  • 打赏
  • 举报
回复
NaN表示非数字.

此常数的值是零被零除所得到的结果。
当运算结果未定义时返回此常数。
使用 IsNaN 确定值是否为非数字。不可能通过将某个值与另一个等于 NaN 的值进行比较来确定该值是否不是数字。

不如改为:
if(e.Graphics.ClipBounds.Left>0) &&
(e.Graphics.ClipBounds.Top>0) &&
(e.Graphics.ClipBounds.Width>0) &&
(e.Graphics.ClipBounds.Height>0) base.OnPaint (e);
zhouweiwansui 2005-03-29
  • 打赏
  • 举报
回复
不明白,关注一下

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧