你是一个C#程序员,写一个GDI+ 的画板程序,要求客户可以修改已画好的对象可以再次捕获,和修改尺寸,移动位置,重新选择颜色及粗细
时间: 2024-02-26 08:59:05 浏览: 21
好的,我可以给您提供一个基本的GDI+画板程序,您可以在此基础上进行修改以满足您的需求。
首先,我们需要在窗体上放置一个PictureBox控件,用于显示我们绘制的图形。然后,我们需要定义一个List对象,用于存储所有已经绘制的对象。
在PictureBox的Paint事件中,我们需要将List中的所有对象绘制到PictureBox上。代码如下:
```
private List<Shape> shapes = new List<Shape>();
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
foreach (Shape shape in shapes)
{
shape.Draw(e.Graphics);
}
}
```
其中,Shape是一个抽象类,所有绘制对象的基类。在Shape类中,我们定义了一些基本属性,如位置、大小、颜色、粗细等。同时,我们还定义了一些抽象方法,如Draw、Move、Resize等,用于实现对绘制对象的操作。
接下来,我们需要实现鼠标事件,以便用户可以在画板上绘制图形。例如,用户可以选择画笔颜色、粗细,然后用鼠标绘制一个矩形。代码如下:
```
private bool isDrawing = false;
private Point start, end;
private Pen pen = new Pen(Color.Black, 1);
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
// 记录起始点
start = e.Location;
isDrawing = true;
}
private void pictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (isDrawing)
{
// 记录当前点
end = e.Location;
// 绘制矩形
Rectangle rect = new Rectangle(start, new Size(end.X - start.X, end.Y - start.Y));
graphics.DrawRectangle(pen, rect);
}
}
private void pictureBox_MouseUp(object sender, MouseEventArgs e)
{
isDrawing = false;
// 将矩形添加到List中
Rectangle rect = new Rectangle(start, new Size(end.X - start.X, end.Y - start.Y));
shapes.Add(new RectangleShape(rect, pen.Color, pen.Width));
pictureBox.Invalidate();
}
```
在上面的代码中,我们使用了一个isDrawing的标志来记录用户是否正在绘制。在鼠标移动事件中,如果isDrawing为true,则绘制一个矩形。在鼠标抬起事件中,将绘制好的矩形添加到List中,并刷新PictureBox,以显示新绘制的图形。
最后,我们还需要实现对已绘制的图形的操作,如修改颜色、粗细、大小、位置等。这些操作可以通过鼠标事件来触发,例如双击一个矩形时,可以弹出一个对话框,让用户修改矩形的属性。代码如下:
```
private void pictureBox_MouseDoubleClick(object sender, MouseEventArgs e)
{
// 查找鼠标所在的图形
Shape shape = null;
foreach (Shape s in shapes)
{
if (s.Contains(e.Location))
{
shape = s;
break;
}
}
// 如果找到了图形,则弹出对话框进行修改
if (shape != null)
{
EditShapeForm form = new EditShapeForm(shape);
if (form.ShowDialog() == DialogResult.OK)
{
pictureBox.Invalidate();
}
}
}
public class EditShapeForm : Form
{
private Shape shape;
public EditShapeForm(Shape shape)
{
InitializeComponent();
this.shape = shape;
// 初始化对话框控件的值,以显示当前图形的属性
...
}
private void okButton_Click(object sender, EventArgs e)
{
// 修改图形属性
shape.Color = colorComboBox.SelectedColor;
shape.Width = widthComboBox.SelectedWidth;
// ...
this.DialogResult = DialogResult.OK;
}
// ...
}
```
在上面的代码中,我们定义了一个EditShapeForm对话框,用于修改图形的属性。在双击一个图形时,先查找鼠标所在的图形,然后将它传递给EditShapeForm对话框,以供用户修改属性。在对话框中,用户可以选择颜色、粗细等属性,然后点击确定按钮,将修改后的属性应用到图形上,并刷新PictureBox。
这样,一个基本的GDI+画板程序就完成了。您可以根据自己的需求进行修改和扩展,例如添加更多的图形类型、实现撤销和重做操作等。