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!"。
相关推荐
m0_738355696 分钟前
java泛型
java·开发语言
大模型铲屎官22 分钟前
哈希表入门到精通:从原理到 Python 实现全解析
开发语言·数据结构·python·算法·哈希算法·哈希表
L_090739 分钟前
【C】队列与栈的相互转换
c语言·开发语言·数据结构
qq4054251971 小时前
基于python的旅客游记和轨迹分析可视化系统设计(新)
开发语言·python
C#Thread1 小时前
C#上位机--进程和线程的区别
java·开发语言
DKPT1 小时前
计算机网络之路由协议(自治系统)
开发语言·笔记·学习·计算机网络·算法
水月梦镜花1 小时前
数据结构:基数排序(c++实现)
开发语言·数据结构·c++
m0_594526301 小时前
基于 PyQt5 实现分组列表滚动吸顶效果
开发语言·python·qt
茂桑2 小时前
MVCC(多版本并发控制)
java·开发语言·数据库
thinkMoreAndDoMore2 小时前
深度学习(3)-TensorFlow入门(常数张量和变量)
开发语言·人工智能·python