C# winform中界面绘图问题

w995171860 2011-07-22 02:48:11
我绘制了一个坐标图,是放在一个控件中,但是窗体在加载这个控件时,图老是出不来,点击按钮或者将窗体最大化或者最小化后,就没事了,这应该是Onpaint事件画出来了,但是第一次老是不行啊,第一次都是闪烁一下,就没了,谁能提供一个方法,使其第一次加载时就能够绘制出来,并且能够不消失,在线等候
...全文
280 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
w995171860 2011-07-27
  • 打赏
  • 举报
回复
已经解决,谢谢各位大侠
aXen 2011-07-25
  • 打赏
  • 举报
回复
你应该在控件的绘图事件里添加绘图,而不是窗体的绘图事件。
happyday1799 2011-07-22
  • 打赏
  • 举报
回复
我做了一个非常简单的加载控件并画图的demo,你可以参考一下,


//构造函数
public Form1()
{
InitializeComponent();

Panel panel = GetPanel();

this.Controls.Add(panel);
}

private Panel GetPanel()
{
Panel panel = new Panel();
panel.Location = new Point(10,10);
panel.Size = new Size(150, 150);
panel.Paint += new PaintEventHandler(panel_Paint);
return panel;
}

void panel_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawEllipse(new Pen(Color.Red), new Rectangle(10, 10, 100, 100));
}

mevender 2011-07-22
  • 打赏
  • 举报
回复
因为窗体Load时会将所有空间刷新一下,如果你是在Load完成之前在控件上绘了图,自然就会出现一闪就消失的情况,最简单的解决方法就是在Load完之后开启一个线程,线程等待50ms执行控件的refresh操作。如果嫌线程太麻烦可以直接拖个Timer控件或者手动创建一个Timer对象,都可以。
happyday1799 2011-07-22
  • 打赏
  • 举报
回复
你的意思是,这个控件是动态添加到窗体里的?而且绘图也是在这个控件上?
w995171860 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cloud_drift 的回复:]
实在不行,你把图像画在一个 Bitmap 对象里,然后把这个 Bitmap 放在 PictureBox 里面进行显示。
就是麻烦点~
[/Quote]

已经是放在Bitmap里,但是还是不行啊,不过,这个方法解决了,绘图时过于闪烁的问题,和现在的问题不一样
Cloud_drift 2011-07-22
  • 打赏
  • 举报
回复
实在不行,你把图像画在一个 Bitmap 对象里,然后把这个 Bitmap 放在 PictureBox 里面进行显示。
就是麻烦点~
w995171860 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 szymis 的回复:]
代码贴出来看下
[/Quote]

没有办法把代码贴出来
这个控件不一定就有,是活动调的,是窗体调控件,然后控件再调控件
w995171860 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 isjoe 的回复:]
显然是重绘导致,你第一次的绘制代码在哪里?

试试:
首次运行绘制完了之后,让你的窗体和控件调用一下this.Refresh(); 或this.Update();
[/Quote]

不行啊,还是和以前一样啊
w995171860 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 happyday1799 的回复:]
你的画图方法是在OnPaint事件里吗?
如果是的话,可以试试1楼的方法,或者如果你是直接在窗体的OnPaint事件里的话
就用this.Invalidate(); 在控件上就用ControlID.Invalidate(); 重绘。
[/Quote]

为了防止绘图消失,在OnPaint事件里写了,调用了绘图方法
szymis 2011-07-22
  • 打赏
  • 举报
回复
代码贴出来看下
szymis 2011-07-22
  • 打赏
  • 举报
回复
ddd
happyday1799 2011-07-22
  • 打赏
  • 举报
回复
你的画图方法是在OnPaint事件里吗?
如果是的话,可以试试1楼的方法,或者如果你是直接在窗体的OnPaint事件里的话
就用this.Invalidate(); 在控件上就用ControlID.Invalidate(); 重绘。
isjoe 2011-07-22
  • 打赏
  • 举报
回复
显然是重绘导致,你第一次的绘制代码在哪里?

试试:
首次运行绘制完了之后,让你的窗体和控件调用一下this.Refresh(); 或this.Update();

110,538

社区成员

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

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

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