拖动滚动条后图像不对了

empty890 2007-06-15 10:34:29
写了段代码单击窗体后画一个矩形和一个圆窗体的AutoScrollMinSize为(400,400)主要代码如下:
his.AutoScroll = true;
this.AutoScrollMinSize = new System.Drawing.Size(400, 400);
private void Form1_Click(object sender,EventArgs e)
{
Graphics g1 = this.CreateGraphics();
g1.DrawRectangle(pen, 0, 0, 200, 200);
g1.DrawEllipse(pen, 200, 200, 200, 200);
}
为什么拖动滚动条后,图像就变得乱了,但是缩小放大后图像没有变化,怎么会这样呢?请高手解释问题产生的原因,该如何解决问题,谢谢。
...全文
740 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
empty890 2007-06-20
  • 打赏
  • 举报
回复
===============
d
Believed 2007-06-16
  • 打赏
  • 举报
回复
Update()
kyle315 2007-06-15
  • 打赏
  • 举报
回复
你贴你的代码,管我何事。呵呵,是你在乱叫。
Macosx 2007-06-15
  • 打赏
  • 举报
回复
我连代码都贴出来了 你叫个啥
kyle315 2007-06-15
  • 打赏
  • 举报
回复
楼主用控件了么 还控件的update
LS的自己试试再说 别纸上谈兵
==================================
呵呵,什么叫纸上谈兵,你试了没有,试过再说吧?
Macosx 2007-06-15
  • 打赏
  • 举报
回复
楼主用控件了么 还控件的update
LS的自己试试再说 别纸上谈兵
kyle315 2007-06-15
  • 打赏
  • 举报
回复
把代码 Graphics g1 = this.CreateGraphics();
g1.DrawRectangle(pen, 0, 0, 200, 200);
g1.DrawEllipse(pen, 200, 200, 200, 200);
写到窗体的paint()事件里面
jiazheng 2007-06-15
  • 打赏
  • 举报
回复
控件的Update()所致
Macosx 2007-06-15
  • 打赏
  • 举报
回复
g1.DrawRectangle(Pens.Red, AutoScrollPosition.X, AutoScrollPosition.Y, 200 + AutoScrollPosition.X, 200 + AutoScrollPosition.Y);
g1.DrawEllipse(Pens.Red, AutoScrollPosition.X + 200, AutoScrollPosition.Y + 200, 200, 200);
再加上 private void Form1_Scroll(object sender, ScrollEventArgs e)
{
Invalidate(ClientRectangle);
}

这是因为你点滚动条后 客户区还是原来的客户区 (0,0)仍为于你所看到的左上角 而不会运动到屏幕外
北京的雾霾天 2007-06-15
  • 打赏
  • 举报
回复
我不清楚楼主现在是什么问题,也不清楚鼠標Click所產生的圖形是否存在是什么意思.

不过如果还有问题,可以参考下这个地址:

在WinForm里绘图
http://blog.csdn.net/hbxtlhx/archive/2007/06/13/1650892.aspx
jiazheng 2007-06-15
  • 打赏
  • 举报
回复
this.SetStyle(ControlStyles.ResizeRedraw, true);
按你所說,窗體改變大小就重繪,能否解決樓主問題!
jiazheng 2007-06-15
  • 打赏
  • 举报
回复
那窗體重繪之后,鼠標Click所產生的圖形是否存在
北京的雾霾天 2007-06-15
  • 打赏
  • 举报
回复
TO:jiazheng(飛天)

Macosx(结贴) 说的
使用ScrollableControl.AutoScrollPosition
来偏移坐标是对的!

因为控件在Paint事件里的Graphics使用的坐标是相对DisplayRectangle的而不是ClientRectangle的.虽然我们有时使用ClientRectangle但这只是大多数情况下碰巧了的值
jiazheng 2007-06-15
  • 打赏
  • 举报
回复
TO:Macosx(结贴)xxxxx
我所說的update()是指客戶區失效,會引發窗體的重繪事件,部分重繪會調用update方法.
因為樓主是在窗體上面繪圖,所以重繪將會清除失效區域,所以图像就变得乱了,如果整個窗體失效,那所繪的圖像將被消除。
建議樓主創建內存bitmap,將所繪圖型繪制在bitmap上,然后添加窗體的OnPaint()事件,再將bitmap繪制到窗體。以解決客戶區失效的問題。
Macosx 2007-06-15
  • 打赏
  • 举报
回复
四个星果然很NB
北京的雾霾天 2007-06-15
  • 打赏
  • 举报
回复
1:没有必要在Form1_Scroll事件里使用Invalidate(ClientRectangle);

2:你可以对控件在构造函数里如下设置:
this.SetStyle(ControlStyles.ResizeRedraw, true);
Macosx 2007-06-15
  • 打赏
  • 举报
回复
我只在使用远程桌面的时候遇到这种情况 在工作机无法复现 可以得刷新的性能有关吧
empty890 2007-06-15
  • 打赏
  • 举报
回复
Macosx:你的方法我试过了,问题解决了,但我发现了一个小问题,就是拖动窗体时,窗体会进行重绘,放大窗体也可以进行重绘,而且图像显示,但是如果我缩小窗体,缩小到窗体装不下图像时,这时也进行了重绘,但图像却不能显示?????

110,534

社区成员

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

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

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