OnPaint()函数调用base.OnPaint()出现栈溢出

new_smile 2011-06-10 09:14:47
OnPaint()函数 private void OnPaint(object sender, PaintEventArgs e)
{
System.Drawing.Graphics g = this.CreateGraphics();
for (int x = 0; x < 15; x++)
{
for (int y = 0; y < 15; y++)
{
if (checkerBoard[y, x] != None) DrawChess(new Point(x, y), checkerBoard[y, x]);
}
}
ReDrawNextPlayerMark();
base.OnPaint(e);
}
private void ReDrawNextPlayerMark()
{
System.Drawing.Graphics g = this.CreateGraphics();
imageList1.Draw(g, 2, 309, 20, 20, Player);
}
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
new_smile 2011-06-11
  • 打赏
  • 举报
回复
谢谢各位的帮助
isjoe 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 new_smile 的回复:]
OnPaint()函数 private void OnPaint(object sender, PaintEventArgs e)
{
System.Drawing.Graphics g = this.CreateGraphics();
for (int x = 0; x < 15; x++)
{
for (int y = 0; y < 15; y++)
{
……
[/Quote]

循环了。。。。。。在Onpaint中不能使用this.CreateGraphics();
通过this.CreateGraphics();取得的对象再绘制的时候,会导致不断发生wm_paint消息
wm_paint消息的不断重复会导致不断的调研OnPaint()方法。。
这里有个无效区域和有效区域的概念

在C#中:OnPaint对应SDK的BeginPaint()和EndPaint()
CreateGraphics()对应SDK的GetDC()
new_smile 2011-06-10
  • 打赏
  • 举报
回复
OnPaint()函数内部调用base.OnPaint();在2010里边能用吗?这个是个死循环吗?
new_smile 2011-06-10
  • 打赏
  • 举报
回复
这个是c#2008里面的代码,我在学习,可是用2010时,首先出现System.Drawing.Graphics g = this.CreateGraphics();这句的StackOverFlowException,如果注释base.OnPaint();这句就能绘制出图形来,可是操作窗口时却看不到图形变化
xuexiaodong2009 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

你这是干嘛,怎么没完没了的System.Drawing.Graphics g = this.CreateGraphics();

直接用e中的Griaphic
然后 ReDrawNextPlayerMark函数中带一个参数(Graphic g),内部都操作这个g
[/Quote]直接用e中的Griaphic
bdmh 2011-06-10
  • 打赏
  • 举报
回复
你这是干嘛,怎么没完没了的System.Drawing.Graphics g = this.CreateGraphics();

直接用e中的Griaphic
然后 ReDrawNextPlayerMark函数中带一个参数(Graphic g),内部都操作这个g

110,538

社区成员

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

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

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