写一个程序C# WINFORM 程序在PictureBOX上绘制一个三角形和一个矩形和一个圆和一个填充红色的椭圆,并实现打印和打印预览功能。
下面是一个在C# WinForm中绘制三角形、矩形、圆和填充红色椭圆,并实现打印和打印预览的示例程序:
在窗体上添加一个PictureBox控件,命名为pictureBox1,并设置其大小和位置。
在窗体上添加两个按钮控件,分别命名为printPreviewButton和printButton,并设置其文本和位置。
在窗体的Load事件中,为两个按钮控件添加Click事件处理程序,以便在单击按钮时执行打印或打印预览操作。同时,在PictureBox的Paint事件中添加绘制三角形、矩形、圆和填充红色椭圆的代码。
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
// 绘制三角形
Point[] points = new Point[3];
points[0] = new Point(50, 100);
points[1] = new Point(100, 50);
points[2] = new Point(150, 100);
e.Graphics.DrawPolygon(Pens.Black, points);
// 绘制矩形
Rectangle rectangle = new Rectangle(200, 50, 100, 100);
e.Graphics.DrawRectangle(Pens.Black, rectangle);
// 绘制圆
Rectangle ellipse = new Rectangle(350, 50, 100, 100);
e.Graphics.DrawEllipse(Pens.Black, ellipse);
// 绘制填充红色的椭圆
Rectangle filledEllipse = new Rectangle(500, 50, 100, 100);
e.Graphics.FillEllipse(Brushes.Red, filledEllipse);
}
在这个示例程序中,我们首先绘制一个三角形,使用Graphics对象的DrawPolygon方法并传递一个包含三个Point的数组以绘制。然后,我们绘制一个矩形,使用Graphics对象的DrawRectangle方法并传递一个Rectangle对象以绘制。接着,我们绘制一个圆,使用Graphics对象的DrawEllipse方法并传递一个Rectangle对象以绘制。最后,我们绘制一个填充红色的椭圆,使用Graphics对象的FillEllipse方法并传递一个Brush对象以绘制填充区域。
在打印和打印预览按钮的Click事件中,我们创建一个PrintDocument类的实例,并为其PrintPage事件添加一个事件处理程序。在事件处理程序中,我们将PictureBox上的图形绘制到打印页面上,然后使用PrintDocument类的Print或PrintPreviewDialog类的ShowDialog方法执行打印或打印预览操作。
完整的代码示例:
csharp
Copy code
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
// 绘制三角形
Point[] points = new Point[3];
points[0] = new Point(50, 100);
points[1] = new Point(100, 50);
points[2] = new Point(150, 100);
e.Graphics.DrawPolygon(Pens.Black, points);
// 绘制矩形
Rectangle rectangle = new Rectangle(200, 50, 100, 100);
e.Graphics.DrawRectangle(Pens.Black, rectangle);
// 绘制圆
Rectangle ellipse = new Rectangle(350, 50, 100, 100);
e.Graphics.DrawEllipse(Pens.Black, ellipse);
// 绘制填充红色的椭圆
Rectangle filledEllipse = new Rectangle(500, 50, 100, 100);
e.Graphics.FillEllipse(Brushes.Red, filledEllipse);
}
private void printPreviewButton_Click(object sender, EventArgs e)
{
// 创建PrintDocument对象
PrintDocument printDocument = new PrintDocument();
// 设置打印页面的边距
Margins margins = new Margins(50, 50, 50, 50);
printDocument.DefaultPageSettings.Margins = margins;
// 为PrintDocument对象的PrintPage事件添加事件处理程序
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
// 创建PrintPreviewDialog对象并显示打印预览对话框
PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument;
printPreviewDialog.ShowDialog();
}
private void printButton_Click(object sender, EventArgs e)
{
// 创建PrintDocument对象
PrintDocument printDocument = new PrintDocument();
// 设置打印页面的边距
Margins margins = new Margins(50, 50, 50, 50);
printDocument.DefaultPageSettings.Margins = margins;
// 为PrintDocument对象的PrintPage事件添加事件处理程序
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
// 调用Print方法执行打印操作
printDocument.Print();
}
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// 获取PictureBox的图形
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bitmap, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
// 将PictureBox的图形绘制到打印页面上
e.Graphics.DrawImage(bitmap, e.MarginBounds);
// 释放资源
bitmap.Dispose();
}
在上面的代码示例中,我们为打印和打印预览按钮的Click事件添加了事件处理程序。在事件处理程序中,我们创建了PrintDocument类的实例,并为其PrintPage事件添加了一个事件处理程序。在事件处理程序中,我们使用Graphics对象的DrawImage方法将PictureBox上的图形绘制到打印页面上。
在打印预览按钮的事件处理程序中,我们还创建了PrintPreviewDialog类的实例,并将PrintDocument对象分配给其Document属性。然后,我们调用ShowDialog方法来显示打印预览对话框。
在打印按钮的事件处理程序中,我们直接调用Print方法来执行打印操作。
需要注意的是,在PrintDocument的PrintPage事件处理程序中,我们使用PictureBox的DrawToBitmap方法来获取PictureBox上的图形,并使用Graphics对象的DrawImage方法将其绘制到打印页面上。此外,我们还需要在事件处理程序结束时释放资源,以避免内存泄漏。
这就是在C# WinForm中绘制三角形、
写一个程序C# WINFORM 在PictureBOX上绘制一个三角形和一个矩形和一个圆和一个填充红色的椭圆,并实现打印和打印预览功能。
下面是一个在C# WinForm中绘制三角形、矩形、圆和填充红色椭圆,并实现打印和打印预览的示例程序:
在窗体上添加一个PictureBox控件,命名为pictureBox1,并设置其大小和位置。
在窗体上添加两个按钮控件,分别命名为printPreviewButton和printButton,并设置其文本和位置。
在窗体的Load事件中,为两个按钮控件添加Click事件处理程序,以便在单击按钮时执行打印或打印预览操作。同时,在PictureBox的Paint事件中添加绘制三角形、矩形、圆和填充红色椭圆的代码。
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
// 绘制三角形
Point[] points = new Point[3];
points[0] = new Point(50, 100);
points[1] = new Point(100, 50);
points[2] = new Point(150, 100);
e.Graphics.DrawPolygon(Pens.Black, points);
// 绘制矩形
Rectangle rectangle = new Rectangle(200, 50, 100, 100);
e.Graphics.DrawRectangle(Pens.Black, rectangle);
// 绘制圆
Rectangle ellipse = new Rectangle(350, 50, 100, 100);
e.Graphics.DrawEllipse(Pens.Black, ellipse);
// 绘制填充红色的椭圆
Rectangle filledEllipse = new Rectangle(500, 50, 100, 100);
e.Graphics.FillEllipse(Brushes.Red, filledEllipse);
}
在这个示例程序中,我们首先绘制一个三角形,使用Graphics对象的DrawPolygon方法并传递一个包含三个Point的数组以绘制。然后,我们绘制一个矩形,使用Graphics对象的DrawRectangle方法并传递一个Rectangle对象以绘制。接着,我们绘制一个圆,使用Graphics对象的DrawEllipse方法并传递一个Rectangle对象以绘制。最后,我们绘制一个填充红色的椭圆,使用Graphics对象的FillEllipse方法并传递一个Brush对象以绘制填充区域。
在打印和打印预览按钮的Click事件中,我们创建一个PrintDocument类的实例,并为其PrintPage事件添加一个事件处理程序。在事件处理程序中,我们将PictureBox上的图形绘制到打印页面上,然后使用PrintDocument类的Print或PrintPreviewDialog类的ShowDialog方法执行打印或打印预览操作。
完整的代码示例:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
// 绘制三角形
Point[] points = new Point[3];
points[0] = new Point(50, 100);
points[1] = new Point(100, 50);
points[2] = new Point(150, 100);
e.Graphics.DrawPolygon(Pens.Black, points);
// 绘制矩形
Rectangle rectangle = new Rectangle(200, 50, 100, 100);
e.Graphics.DrawRectangle(Pens.Black, rectangle);
// 绘制圆
Rectangle ellipse = new Rectangle(350, 50, 100, 100);
e.Graphics.DrawEllipse(Pens.Black, ellipse);
// 绘制填充红色的椭圆
Rectangle filledEllipse = new Rectangle(500, 50, 100, 100);
e.Graphics.FillEllipse(Brushes.Red, filledEllipse);
}
private void printPreviewButton_Click(object sender, EventArgs e)
{
// 创建PrintDocument对象
PrintDocument printDocument = new PrintDocument();
// 设置打印页面的边距
Margins margins = new Margins(50, 50, 50, 50);
printDocument.DefaultPageSettings.Margins = margins;
// 为PrintDocument对象的PrintPage事件添加事件处理程序
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
// 创建PrintPreviewDialog对象并显示打印预览对话框
PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument;
printPreviewDialog.ShowDialog();
}
private void printButton_Click(object sender, EventArgs e)
{
// 创建PrintDocument对象
PrintDocument printDocument = new PrintDocument();
// 设置打印页面的边距
Margins margins = new Margins(50, 50, 50, 50);
printDocument.DefaultPageSettings.Margins = margins;
// 为PrintDocument对象的PrintPage事件添加事件处理程序
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
// 调用Print方法执行打印操作
printDocument.Print();
}
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// 获取PictureBox的图形
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bitmap, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
// 将PictureBox的图形绘制到打印页面上
e.Graphics.DrawImage(bitmap, e.MarginBounds);
// 释放资源
bitmap.Dispose();
}
在上面的代码示例中,我们为打印和打印预览按钮的Click事件添加了事件处理程序。在事件处理程序中,我们创建了PrintDocument类的实例,并为其PrintPage事件添加了一个事件处理程序。在事件处理程序中,我们使用Graphics对象的DrawImage方法将PictureBox上的图形绘制到打印页面上。
在打印预览按钮的事件处理程序中,我们还创建了PrintPreviewDialog类的实例,并将PrintDocument对象分配给其Document属性。然后,我们调用ShowDialog方法来显示打印预览对话框。
在打印按钮的事件处理程序中,我们直接调用Print方法来执行打印操作。
需要注意的是,在PrintDocument的PrintPage事件处理程序中,我们使用PictureBox的DrawToBitmap方法来获取PictureBox上的图形,并使用Graphics对象的DrawImage方法将其绘制到打印页面上。此外,我们还需要在事件处理程序结束时释放资源,以避免内存泄漏。
就是在C# WinForm中绘制三角形、矩形、圆和填充红色的椭圆,并实现打印和打印预览功能的完整示例代码。
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace WinFormPrintExample
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// 绘制三角形
Point[] points = new Point[3];
points[0] = new Point(50, 150);
points[1] = new Point(150, 150);
points[2] = new Point(100, 50);
pictureBox1.CreateGraphics().DrawPolygon(Pens.Black, points);
// 绘制矩形
Rectangle rectangle = new Rectangle(200, 50, 100, 100);
pictureBox1.CreateGraphics().DrawRectangle(Pens.Black, rectangle);
// 绘制圆
Rectangle ellipse = new Rectangle(350, 50, 100, 100);
pictureBox1.CreateGraphics().DrawEllipse(Pens.Black, ellipse);
// 绘制填充红色的椭圆
Rectangle filledEllipse = new Rectangle(500, 50, 100, 100);
pictureBox1.CreateGraphics().FillEllipse(Brushes.Red, filledEllipse);
}
private void printPreviewButton_Click(object sender, EventArgs e)
{
// 创建PrintDocument对象
PrintDocument printDocument = new PrintDocument();
// 设置打印页面的边距
Margins margins = new Margins(50, 50, 50, 50);
printDocument.DefaultPageSettings.Margins = margins;
// 为PrintDocument对象的PrintPage事件添加事件处理程序
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
// 创建PrintPreviewDialog对象并显示打印预览对话框
PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument;
printPreviewDialog.ShowDialog();
}
private void printButton_Click(object sender, EventArgs e)
{
// 创建PrintDocument对象
PrintDocument printDocument = new PrintDocument();
// 设置打印页面的边距
Margins margins = new Margins(50, 50, 50, 50);
printDocument.DefaultPageSettings.Margins = margins;
// 为PrintDocument对象的PrintPage事件添加事件处理程序
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
// 调用Print方法执行打印操作
printDocument.Print();
}
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// 获取PictureBox的图形
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bitmap, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
// 将PictureBox的图形绘制到打印页面上
e.Graphics.DrawImage(bitmap, e.MarginBounds);
// 释放资源
bitmap.Dispose();
}
}
}
上面的代码示例中,我们在MainForm_Load事件处理程序中绘制了一个三角形、一个矩形、一个圆和一个填充红色的椭圆。在打印和打印预览按钮的Click事件处理程序和打印按钮的Click事件处理程序中,我们都创建了PrintDocument对象,并为其的PrintPage事件添加了事件处理程序。在打印预览按钮的Click事件处理程序中,我们创建了PrintPreviewDialog对象并将PrintDocument对象赋值给其Document属性,然后调用ShowDialog方法显示打印预览对话框。在打印按钮的Click事件处理程序中,我们直接调用Print方法执行打印操作。
在PrintDocument的PrintPage事件处理程序中,我们首先获取了PictureBox的图形,然后使用Graphics对象的DrawImage方法将其绘制到打印页面上,最后释放了资源。注意,我们使用了e.MarginBounds属性来确定打印页面上PictureBox图形的位置和大小,这样可以使打印页面的边距生效。
上面的代码示例是一个完整的示例,可以实现在PictureBox上绘制多个图形并实现打印和打印预览功能。需要注意的是,在实际开发中,可能需要根据实际需求对代码进行修改和优化。
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace WinFormPrintExample
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// 绘制三角形
Point[] points = new Point[3];
points[0] = new Point(50, 150);
points[1] = new Point(150, 150);
points[2] = new Point(100, 50);
pictureBox1.CreateGraphics().DrawPolygon(Pens.Black, points);
// 绘制矩形
Rectangle rectangle = new Rectangle(200, 50, 100, 100);
pictureBox1.CreateGraphics().DrawRectangle(Pens.Black, rectangle);
// 绘制圆
Rectangle ellipse = new Rectangle(350, 50, 100, 100);
pictureBox1.CreateGraphics().DrawEllipse(Pens.Black, ellipse);
// 绘制填充红色的椭圆
Rectangle filledEllipse = new Rectangle(500, 50, 100, 100);
pictureBox1.CreateGraphics().FillEllipse(Brushes.Red, filledEllipse);
}
private void printPreviewButton_Click(object sender, EventArgs e)
{
// 创建PrintDocument对象
PrintDocument printDocument = new PrintDocument();
// 设置打印页面的边距
Margins margins = new Margins(50, 50, 50, 50);
printDocument.DefaultPageSettings.Margins = margins;
// 为PrintDocument对象的PrintPage事件添加事件处理程序
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
// 创建PrintPreviewDialog对象并显示打印预览对话框
PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument;
printPreviewDialog.ShowDialog();
}
private void printButton_Click(object sender, EventArgs e)
{
// 创建PrintDocument对象
PrintDocument printDocument = new PrintDocument();
// 设置打印页面的边距
Margins margins = new Margins(50, 50, 50, 50);
printDocument.DefaultPageSettings.Margins = margins;
// 为PrintDocument对象的PrintPage事件添加事件处理程序
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
// 调用Print方法执行打印操作
printDocument.Print();
}
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// 获取PictureBox的图形
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bitmap, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
// 将PictureBox的图形绘制到打印页面上
e.Graphics.DrawImage(bitmap, e.MarginBounds);
// 释放资源
bitmap.Dispose();
}
}
}