我正在制作类似ms画的小画作程序。目前,我正在尝试实施“选择功能”。我面临着闪烁的问题,所以我做了一些研究,我发现,我应该创建自己的Panel类。
public class MyDisplay : Panel
{
public MyDisplay()
{
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw |
ControlStyles.ContainerControl |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.SupportsTransparentBackColor
, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();
}
}
主要形式有字段:
MyDisplay panel1 = new MyDisplay();
Graphics graphics1 = panel1.CreateGraphics();
我在面板上使用了3个事件:
graphics1.drawRectangle(...)
和graphics1.Clear()
这有什么问题?为什么即使整个面板是白色的并且那里只有一个矩形,我仍然会遇到闪烁的问题?谢谢。
编辑:
我已经覆盖了OnPaint方法,但我仍然不知道下一步该做什么。
protected override void OnPaint(PaintEventArgs e)
{
// Call the OnPaint method of the base class.
base.OnPaint(e);
// Call methods of the System.Drawing.Graphics object.
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);
}
EDIT2: 我应该在位图/图像上绘制并覆盖OnPaint方法从那里复制图像并将其粘贴到面板上吗?
答案 0 :(得分:1)
删除定义 graphics1 字段的行。
使用通过PaintEventArgs对象传入的Graphics对象,在OnPaint的覆盖中执行所有绘制。使用方法Invalidate(),Refresh()和Update()来控制从其他代码重新绘制的时间。
如果您在使用此设计时遇到任何特定困难,请回电。