如何在C#中通过按钮点击事件在窗体上进行绘制?
通过按钮点击触发C#窗体绘制(Visual Studio 2022)
最可靠的方式是通过触发窗体的Paint事件完成绘制,因为Paint事件会自动处理重绘场景(比如窗体被遮挡后恢复、最小化还原时)。具体实现如下:
方法一:触发Paint事件重绘(推荐)
- 在Visual Studio设计器中给窗体添加按钮(比如命名为
btnDraw),双击按钮生成点击事件处理程序。 - 给窗体绑定
Paint事件:选中窗体,在属性窗口点击闪电图标(事件面板),找到Paint并双击,生成事件处理方法。 - 编写代码:
// 按钮点击事件:触发窗体重绘 private void btnDraw_Click(object sender, EventArgs e) { // Invalidate()标记整个窗体需要重绘,系统会自动调用Paint事件 this.Invalidate(); // 若只需重绘特定区域,可指定范围:this.Invalidate(new Rectangle(50,50,200,100)); } // 窗体Paint事件:编写核心绘制逻辑 private void Form1_Paint(object sender, PaintEventArgs e) { // 使用PaintEventArgs提供的Graphics对象执行绘制 Pen redPen = new Pen(Color.Red, 2); e.Graphics.DrawRectangle(redPen, 50, 50, 200, 100); // 释放GDI+资源 redPen.Dispose(); }
方法二:直接获取Graphics绘制(不推荐)
如果仅需临时绘制无需持久化的内容,可直接在按钮点击中获取窗体的Graphics对象,但绘制内容会在窗体重绘时消失:
private void btnDraw_Click(object sender, EventArgs e) { // using语句自动释放Graphics资源 using(Graphics g = this.CreateGraphics()) { Pen bluePen = new Pen(Color.Blue, 3); g.DrawEllipse(bluePen, 100, 100, 150, 100); bluePen.Dispose(); } }
新手注意事项
- 优先选择方法一,它能保证绘制内容在窗体重绘时自动恢复。
- 所有GDI+对象(如
Pen、Brush)使用后必须释放资源,避免内存泄漏,推荐用using语句自动管理。
内容的提问来源于stack exchange,提问作者kyleryan1291
相关产品推荐
相关产品推荐

