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!"。
相关推荐
重生之我在20年代敲代码30 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文32 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
编程零零七3 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
2401_858286114 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py4 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy4 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
C-SDN花园GGbond5 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处6 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ7 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
leon6257 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab