编写一段代码,让winform窗口重新打开后显示之前的绘图
时间: 2023-09-15 18:05:10 浏览: 166
### 回答1:
好的,以下是一段C#代码示例,可以在WinForm窗体的Load事件中添加,以在窗口重新打开后显示之前的绘图:
```
private List<Point> points = new List<Point>(); //存储绘图点坐标的列表
private void Form1_Load(object sender, EventArgs e)
{
//在窗口打开后重新绘制之前的图形
this.Refresh();
foreach (Point p in points)
{
//绘制每个点
Graphics g = this.CreateGraphics();
g.FillEllipse(Brushes.Black, p.X, p.Y, 5, 5);
g.Dispose();
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
//绘制当前的图形
foreach (Point p in points)
{
e.Graphics.FillEllipse(Brushes.Black, p.X, p.Y, 5, 5);
}
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
//将鼠标点击位置加入到点列表中
points.Add(new Point(e.X, e.Y));
//重新绘制窗口
this.Invalidate();
}
```
这段代码利用一个点列表存储所有的绘图点坐标,并在窗口重新打开时重绘之前的图形。当用户在窗口中点击鼠标时,新的点将被添加到列表中,并且窗口将被重新绘制以显示新的和之前的点。
### 回答2:
编写一个实现上述功能的示例代码如下:
1. 首先,在WinForm窗口类中添加一个成员变量用于保存之前绘制的图形对象,例如`private Graphics previousGraphics;`。
2. 在窗口加载时,将当前绘图保存到`previousGraphics`中。可以在窗口的`Load`事件处理程序中实现,如下所示:
```csharp
private void Form1_Load(object sender, EventArgs e)
{
previousGraphics = this.CreateGraphics();
// 在这里进行之前的绘图操作,例如:
// previousGraphics.DrawLine(Pens.Red, new Point(0, 0), new Point(100, 100));
// previousGraphics.DrawEllipse(Pens.Blue, new Rectangle(200, 200, 100, 100));
}
```
3. 当窗口重新打开时,再次绘制之前的图形。可以在窗口的`Paint`事件处理程序中实现,如下所示:
```csharp
private void Form1_Paint(object sender, PaintEventArgs e)
{
// 在这里重新绘制之前的图形
if (previousGraphics != null)
{
e.Graphics.DrawImage(previousGraphics, 0, 0);
}
}
```
这样,当窗口重新打开时,之前绘制的图形就会显示在窗口中。您可以根据实际需求在`Load`事件处理程序中进行之前的绘图操作,然后在`Paint`事件处理程序中重新绘制图形。
### 回答3:
要实现让WinForm窗口重新打开后显示之前的绘图,可以使用以下步骤:
1. 在WinForm窗口的代码中添加一个PictureBox控件,用于显示绘图。
2. 在窗口的Load事件中,加载之前保存的绘图数据。可以将绘图数据保存在文件中,或者在程序中使用变量保存。
3. 在加载绘图数据之前,先清空PictureBox控件中的内容,以确保之前的绘图已经清除。
4. 通过绘图数据,重新绘制在PictureBox控件中。
以下是示例代码:
```csharp
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WinFormApp
{
public partial class MainForm : Form
{
// 保存绘图数据
private Bitmap previousDrawing;
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// 加载之前保存的绘图数据
LoadPreviousDrawing();
}
private void LoadPreviousDrawing()
{
// 清空PictureBox控件中的内容
pictureBox.Image = null;
// 判断是否存在之前的绘图数据
if (previousDrawing != null)
{
// 将之前保存的绘图数据绘制到PictureBox控件中
pictureBox.Image = previousDrawing;
}
}
private void SaveCurrentDrawing()
{
// 获取当前绘图,并保存到previousDrawing变量中
previousDrawing = new Bitmap(pictureBox.ClientSize.Width, pictureBox.ClientSize.Height);
using (Graphics graphics = Graphics.FromImage(previousDrawing))
{
graphics.Clear(Color.White); // 清空绘图
// 在此处添加绘图逻辑,绘制到graphics中
}
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// 保存当前绘图数据
SaveCurrentDrawing();
// 可以将previousDrawing保存到文件中,以便下次加载
}
}
}
```
以上代码中,当窗口加载后,会自动加载之前保存的绘图数据,并将其绘制到PictureBox控件中。在窗口关闭时,会保存当前的绘图数据,以便下次打开时加载。为了简化示例,绘图的逻辑未在代码中提供,需要根据具体需求自行添加。
阅读全文