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

标签 c# winforms

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

相关文章:

c# - 更改 VSPS 的类别名称

C# 捕获 webbrowser 发出的 http 请求

C# WinSCP 为用户提供接受或拒绝 RSA key 的选项

c# - 如何获取我的 Windows 窗体应用程序已本地化为的所有语言的列表?

c# - Azure Functions 使用两个输出 blob 调整 blob 大小

c# - 使用 LINQ 从 DataTable 获取不同的项目

c# - DataGridViewColumn 的进度条

c# - 未捕获异常

c# - 拖动时比较 WinForms 控件位置

C# visual studio 和多​​个 mySQL 查询