C#小结:Winform中打印控件的用法和小结

一、需求

用户点击打印后,弹出打印预览,用户关闭预览框后,询问是否打印,如果要打印则弹出打印框。(备注:打印内容只能是自定义的字符串,不支持指定文件夹打印)

二、实现代码

cs 复制代码
using System.Drawing.Printing;

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 触发打印预览按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            PrintPreview();
        }

        #region 打印相关方法
        /// <summary>
        /// 打印预览
        /// </summary>
        private void PrintPreview()
        {
            PrintDocument printDocument = new PrintDocument();
            printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage);

            PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
            printPreviewDialog.Document = printDocument;

            // 确认关闭预览框后
            if (printPreviewDialog.ShowDialog() == DialogResult.Cancel)
            {
                // 询问用户是否打印
                if (MessageBox.Show("您确定要打印吗?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
                {
                    PrintContents();//弹出打印框
                }

            }
        }
        /// <summary>
        /// 弹出打印框
        /// </summary>
        private void PrintContents()
        {
            PrintDialog printDialog = new PrintDialog();
            if (printDialog.ShowDialog() == DialogResult.OK)
            {
                PrintDocument printDocument = new PrintDocument();
                printDocument.PrinterSettings = printDialog.PrinterSettings;
                printDocument.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage);//打印对应的内容
                printDocument.Print();
            }
        }
        /// <summary>
        /// 打印内容
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.DrawString("Hello, World!", new Font("Arial", 12), Brushes.Black, 100, 100);
        }
        #endregion

    }
}

三、代码小结

  1. 按钮点击事件button1_Click 方法触发 PrintPreview 方法。
  2. 打印预览PrintPreview 方法创建一个 PrintDocument 对象并设置其 PrintPage 事件处理程序。然后显示 PrintPreviewDialog,供用户预览打印内容。
  3. 确认打印 :如果用户在预览对话框中点击了关闭,则弹出确认对话框询问是否打印。如果用户确认,则调用 PrintContents 方法。
  4. 弹出打印框PrintContents 方法显示 PrintDialog 供用户选择打印机和设置。如果用户确认,则重新创建 PrintDocument 对象,并设置打印机设置,最后调用 Print 方法进行打印。
  5. 打印内容PrintDocument_PrintPage 方法定义了实际的打印内容,这里只是简单地打印 "Hello, World!"。
相关推荐
hdsoft_huge11 分钟前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
风中的微尘27 分钟前
39.网络流入门
开发语言·网络·c++·算法
未来之窗软件服务1 小时前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
小冯记录编程1 小时前
C++指针陷阱:高效背后的致命危险
开发语言·c++·visual studio
1uther2 小时前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎
C_Liu_2 小时前
C++:类和对象(下)
开发语言·c++
coderxiaohan2 小时前
【C++】类和对象1
java·开发语言·c++
阿幸软件杂货间3 小时前
Office转PDF转换器v1.0.py
开发语言·pdf·c#
扯淡的闲人3 小时前
多语言编码Agent解决方案(5)-IntelliJ插件实现
开发语言·python
丑小鸭是白天鹅3 小时前
Kotlin协程详细笔记之切线程和挂起函数
开发语言·笔记·kotlin