嗨,我正在尝试实现一种使用编码来调整大小的表单。我已使用form_paint方法绘制边框,但无法“绘制”此边框。我打算做的是,当我使用计时器“平滑调整大小”调整表单大小时,表单边框将随着调整大小一起更新。我该怎么办?
Pen setupControlPen = new Pen(SystemColors.Control, 16);
Pen setupDimGrayPen = new Pen(Color.DimGray, 5);
在我的form_paint内://绘制表单边框
Rectangle newRectangle;
newRectangle = new Rectangle(new Point(0, 0), new Size(this.Width - 1, this.Height - 1));
setupGraphics.DrawRectangle(setupDimGrayPen, newRectangle);
在click事件中://我试图绘制已经绘制的边框。
Rectangle newRectangle = new Rectangle(new Point(0, 0), new Size(this.Width - 1, this.Height - 1));
setupGraphics.DrawRectangle(setupControlPen, newRectangle);
谢谢!
更新:我尝试同时使用resize_form事件和计时器来重绘,但是无论何时我调整表单大小时,仍然无法重绘边框。
更新2:覆盖方法有效!关于setupGraphics:
//global space
Graphics setupGraphics;
//form_load
setupGraphics = this.CreateGraphics();
//so whenever I want to draw something during an event, supposing a button click event to draw a line:
setupGraphics.DrawLine(pen, point1, point2);
我想问一下这种方法有什么缺陷吗?还是应该在form_paint方法内完成所有操作?
最佳答案
尝试覆盖OnPaintBackground
方法,并将窗体的样式设置为ResizeRedraw并对其进行双缓冲:
public Form1() {
InitializeComponent();
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
}
protected override void OnPaintBackground(PaintEventArgs e) {
e.Graphics.Clear(SystemColors.Control);
using (Pen setupDimGrayPen = new Pen(Color.DimGray, 5)) {
Rectangle newRectangle;
newRectangle = new Rectangle(new Point(0, 0), new Size(this.Width - 1, this.Height - 1));
e.Graphics.DrawRectangle(setupDimGrayPen, newRectangle);
}
}
目前尚不清楚
setupGraphics
的来源。
关于c# - 在winforms中绘制绘制的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7795611/