你的位置: 首页 > 新闻博客 > 技术博客

写一个程序C# WINFORM 程序在PictureBOX上绘制一个三角形和一个矩形和一个圆和一个填充红色的椭圆,并实现打印和打印预览功能。

2023-03-08 07:19:26

下面是一个在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();

        }

    }

}


QQ在线咨询
热线电话
0531-66900120
售后服务
13287796906
QQ在线咨询
热线电话
0531-66900120
售后服务
13287796906