我有一个简单的Photoshop制作的网格,我想用它作为进度条,我需要绘制从1到100的圆形椭圆(然后在x时间内可能大约100次)。
如果我使用System.Graphic
,我没有持久的结果。
然后我通过在表单的Paint Event中插入指令找到了使用PaintEventArgs方法的代码。
不幸的是,在我看来,这不是一个解决方案,因为我只需要在我需要的时候画画,而且只在我想要的地方画画....换句话说,我需要一个简单的函数,当我需要时能够画出所需的椭圆...... / p>
我还试图覆盖OnPaint-base但我真的不明白如何使用它,如果可能有助于实现我的目标。
这里有一些代码:
使用绘画事件:
private void Main_Paint(object sender, PaintEventArgs e)
{
// Create pen.
Pen blackPen = new Pen(Color.Yellow, 3);
// Create rectangle for ellipse.
Rectangle rect = new Rectangle(355, 282, 9, 9);
e.Graphics.DrawEllipse(blackPen, rect);
}
使用图形模式:
private void lbl_help_Click(object sender, EventArgs e)
{
//SetStatus("BURNING PROCESS COMPLETED SUCCESSFULLY");
Graphics g = this.CreateGraphics();
// Create pen.
Pen blackPen = new Pen(Color.Yellow, 3);
// Create rectangle for ellipse.
Rectangle rect = new Rectangle(355, 282, 9, 9);
// Draw ellipse to screen.
g.DrawEllipse(blackPen, rect);
System.Threading.Thread.Sleep(3000);
}
我发现这个覆盖OnPaint()
,但我真的不知道如何使用它,如何覆盖form-paint事件或如何仅在需要时调用它并传递值:
private void lbl_help_Click(object sender, EventArgs e)
{
//SetStatus("BURNING PROCESS COMPLETED SUCCESSFULLY",);
Graphics g = this.CreateGraphics();
// Create pen.
Pen blackPen = new Pen(Color.Yellow, 3);
// Create rectangle for ellipse.
Rectangle rect = new Rectangle(355, 282, 9, 9);
// Draw ellipse to screen.
g.DrawEllipse(blackPen, rect);
System.Threading.Thread.Sleep(3000);
}
其他的东西:
我想如果我使用变量来存储百分比并调用表单的绘制刷新(可能无效?)来更新结果应该可以工作但是我会丢失任何类型的动画,在其他地方我回到非再次持续状态...我需要使用网格作为进度条,只在期望的时间添加圆圈,而不会丢失背面图...
我需要填写的网格非常简单,这里有截图:
我不应该为声誉发布图片(我是新用户!),here the link
编辑: 我解决了平滑问题(至少在图形模式下):
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;