C# GDI绘制,我只想重绘某一部分如和实现?

shadan05 2010-11-20 11:06:04
我需要绘制一些文字及计算结果,显示在一个panel上,显示的结果比较多,所以就想如何只绘制某一部分?

例如下面这样:

private void Form2_Paint(object sender, PaintEventArgs e)
{
StringBuilder sb = new StringBuilder();
sb.Append("D1= 12mm");
sb.Append(" ");
sb.Append("D2= 23mm");
sb.Append(" ");
sb.Append("D2= 32mm");
sb.Append(" \n");
sb.Append("V1= 33\xb3");

Rectangle displayRectangle =
new Rectangle(new Point(20, 20), new Size(500, 500));

// Construct 2 new StringFormat objects
StringFormat format1 = new StringFormat(StringFormatFlags.NoClip);
StringFormat format2 = new StringFormat(format1);

// Set the LineAlignment and Alignment properties for
// both StringFormat objects to different values.
format1.LineAlignment = StringAlignment.Center;
format1.Alignment = StringAlignment.Center;

// Draw the bounding rectangle and a string for each
// StringFormat object.
e.Graphics.DrawRectangle(Pens.Black, displayRectangle);
e.Graphics.DrawString(sb.ToString(), this.Font,
Brushes.Red, (RectangleF)displayRectangle, format1);
}

运行结果:


我如何只重绘最后一个结果?或者选择中间某个结果重绘?关键是结果多的时候,有可能把一些其他显示内容覆盖,重绘后其他的内容不能丢掉,如何实现? 全部重绘当然也能实现,但是多的时候还有点小慢。

找到这个字符串的坐标,然后重绘制,但是如果覆盖其他的内容,有重叠的情况下,如何搞?
...全文
931 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadan05 2010-11-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 whrspsoft3723 的回复:]
重叠不是gdi+的问题,是你需要在设计中实现的东西。
看这代码,还没有考虑画面超出客户区的显示。
[/Quote]

这个不用考虑,应为要控制鼠标的活动范围。

图像的分层也可以解决的,只是看大家有没有其他的做法。
whrspsoft3723 2010-11-20
  • 打赏
  • 举报
回复
重叠不是gdi+的问题,是你需要在设计中实现的东西。
看这代码,还没有考虑画面超出客户区的显示。
whrspsoft3723 2010-11-20
  • 打赏
  • 举报
回复
g.SetClip();
或g.clip
doubleu2005 2010-11-20
  • 打赏
  • 举报
回复
要使用窗体重绘,参考WINDOWS核心编程和Programming Windows
shadan05 2010-11-20
  • 打赏
  • 举报
回复
看来只能是分层了,已经有几层了,所以不想在分了。
colorall 2010-11-20
  • 打赏
  • 举报
回复
没办法。那就得分图层了
shadan05 2010-11-20
  • 打赏
  • 举报
回复
可能有N层的重叠,圆上面是直线上面又是一个圆,最上面是结果,这样的话结果下面就有3条线的重叠了。
shadan05 2010-11-20
  • 打赏
  • 举报
回复
这样就是还要绘制下面那条线,如果有多条也是麻烦啊。

emolou 2010-11-20
  • 打赏
  • 举报
回复
哇..好酷哦..我正在学...哈哈
colorall 2010-11-20
  • 打赏
  • 举报
回复
如 this.Invalidate(new Rectangle(10, 10, 100, 100));
shadan05 2010-11-20
  • 打赏
  • 举报
回复
打个比方, v1=33 下面如果还条线? 我只想重绘v1=44。

区域无效?
colorall 2010-11-20
  • 打赏
  • 举报
回复
只要让重绘区域无效即可
whrspsoft3723 2010-11-20
  • 打赏
  • 举报
回复
楼主想多了。
我是针对问题发表意见的,楼主水平还是挺不错的。
提个建议,考虑zorder了吗? 把控制权交给用户可行吗?
shadan05 2010-11-20
  • 打赏
  • 举报
回复
我上面只是一个实例。
shadan05 2010-11-20
  • 打赏
  • 举报
回复
现在做的就是在一个容器上面,画圆需要算面积,画线要计算距离,还有N种操作类型像曲线等等N中算法,也没有限制用户在这个容器上能画多少东西,画一种我就要显示一个结果集,结果是需要翻页,所以涉及和计算及一些逻辑的东西太多,而且用户可以编辑之前已经画好的结果,可以编辑之前画好的线。


所以我就想来问问大家有没有搞过这样的实现?

111,094

社区成员

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

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

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