gpt4 book ai didi

c# - 在winforms中绘制绘制的图形

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:05 24 4
gpt4 key购买 nike

嗨,我正在尝试实现一种使用编码来调整大小的表单。我已使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com