winfrom 打印表格 字符串的封装实现代码 附源码下载

下面是关于“winform打印表格字符串的封装实现代码附源码下载”的完整攻略:

一、背景介绍

在实际开发中,我们经常会遇到需要打印表格字符串的需求,例如打印报表、流水账单等等。在C#的winforms框架中,可以通过调用PrintDocument类的Print方法来实现打印功能。然而,PrintDocument类并没有提供直接打印表格字符串的方法,因此需要我们自己进行封装。下面,我们将介绍如何封装实现打印表格字符串的功能。

二、封装实现代码

下面我们将分步骤介绍如何封装实现打印表格字符串的功能。

1. 创建PrintDocument对象

首先,需要创建PrintDocument对象,并为其设置PrintPage事件处理程序。PrintPage事件在打印时发生,可以用于处理每一页的打印内容。示例代码如下:

PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(PrintPageHandler);

2. 实现PrintPage事件处理程序

其次,需要实现PrintPage事件处理程序来处理每一页的打印内容。在该事件处理程序中,我们将绘制表格字符串的内容,并调用Graphics.DrawString方法进行绘制。示例代码如下:

private void PrintPageHandler(object sender, PrintPageEventArgs e)
{
    // 设置打印区域
    Rectangle pageBounds = e.MarginBounds;

    // 绘制表格字符串内容
    string tableString = "姓名\t性别\t年龄\n张三\t男\t20\n李四\t女\t18\n王五\t男\t22";
    using (var tableFont = new Font("宋体", 12))
    {
        e.Graphics.DrawString(tableString, tableFont, Brushes.Black, pageBounds);
    }
}

在上面的示例中,我们使用了一个字符串变量tableString来存储表格字符串的内容,并使用\t表示各个列之间的分隔符。在绘制表格字符串内容时,我们使用了Graphics.DrawString方法,并传入tableFont、Brushes.Black和pageBounds参数来实现绘制。

3. 对话框中调用Print方法

最后,我们将创建好的PrintDocument对象传入打印对话框,并在对话框中调用Print方法来打印内容。示例代码如下:

// 创建打印对话框
PrintDialog printDialog = new PrintDialog();
printDialog.Document = printDocument;

// 显示打印对话框
if (printDialog.ShowDialog() == DialogResult.OK)
{
    // 开始打印
    printDocument.Print();
}

在上面的示例中,我们创建了一个打印对话框并将PrintDocument对象传入其中。当用户点击打印按钮时,程序将调用Print方法来打印内容。

三、示例

下面,我们将给出两个示例,分别演示如何在winforms框架中打印简单表格和复杂表格。

1. 打印简单表格

private void PrintSimpleTable()
{
    PrintDocument printDocument = new PrintDocument();
    printDocument.PrintPage += new PrintPageEventHandler(PrintPageHandler);

    void PrintPageHandler(object sender, PrintPageEventArgs e)
    {
        Rectangle pageBounds = e.MarginBounds;
        string tableString = "姓名\t性别\t年龄\n张三\t男\t20\n李四\t女\t18\n王五\t男\t22";
        using (var tableFont = new Font("宋体", 12))
        {
            e.Graphics.DrawString(tableString, tableFont, Brushes.Black, pageBounds);
        }
    }

    PrintDialog printDialog = new PrintDialog();
    printDialog.Document = printDocument;

    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        printDocument.Print();
    }
}

在上面的示例中,我们定义了一个名为PrintSimpleTable的方法。在这个方法中,我们创建了PrintDocument对象,实现了PrintPage事件处理程序,并添加了打印对话框。在PrintPage事件处理程序中,我们绘制了一个简单的表格字符串,并在打印对话框中调用Print方法来打印内容。

2. 打印复杂表格

private void PrintComplexTable()
{
    PrintDocument printDocument = new PrintDocument();
    printDocument.PrintPage += new PrintPageEventHandler(PrintPageHandler);

    void PrintPageHandler(object sender, PrintPageEventArgs e)
    {
        Rectangle pageBounds = e.MarginBounds;

        // 表格内容
        string tableString = "编号\t姓名\t性别\t年龄\t地址\n";
        tableString += "001\t张三\t男\t20\t北京市海淀区\n";
        tableString += "002\t李四\t女\t18\t北京市朝阳区\n";
        tableString += "003\t王五\t男\t22\t北京市通州区\n";
        tableString += "004\t赵六\t女\t19\t北京市丰台区\n";
        tableString += "005\t钱七\t女\t25\t北京市昌平区\n";

        // 计算表格列宽
        int[] columnWidths = new int[5];
        string[] rows = tableString.Split('\n');
        for (int i = 0; i < rows.Length; i++)
        {
            string[] columns = rows[i].Split('\t');
            for (int j = 0; j < columns.Length; j++)
            {
                columnWidths[j] = Math.Max(columnWidths[j], columns[j].Length);
            }
        }

        // 绘制表格
        using (var tableFont = new Font("宋体", 12))
        using (var headerBrush = new SolidBrush(Color.DarkGray))
        {
            int x = pageBounds.Left;
            int y = pageBounds.Top;
            for (int i = 0; i < rows.Length; i++)
            {
                string[] columns = rows[i].Split('\t');
                for (int j = 0; j < columns.Length; j++)
                {
                    int columnWidth = columnWidths[j] * tableFont.Height;
                    Rectangle cellBounds = new Rectangle(x, y, columnWidth, tableFont.Height);
                    e.Graphics.DrawString(columns[j], tableFont, i == 0 ? headerBrush : Brushes.Black, cellBounds);
                    x += columnWidth;
                }
                y += tableFont.Height;
                x = pageBounds.Left;
            }
        }
    }

    PrintDialog printDialog = new PrintDialog();
    printDialog.Document = printDocument;

    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        printDocument.Print();
    }
}

在上面的示例中,我们定义了一个名为PrintComplexTable的方法。在这个方法中,我们创建了PrintDocument对象,并实现了PrintPage事件处理程序。在PrintPage事件处理程序中,我们首先定义了一个表格字符串,其中包含编号、姓名、性别、年龄和地址等五个列。然后,我们计算了每一列的宽度,并使用Graphics.DrawString方法绘制表格。同时,我们也对第一行进行了特殊处理,使用灰色作为表头的背景颜色。最后,在打印对话框中调用Print方法来打印内容。

四、源码下载

如果需要完整的源码,可以前往Github下载:https://github.com/changsin/Winforms-Table-Printer

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:winfrom 打印表格 字符串的封装实现代码 附源码下载 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C#构造函数详解

    C#构造函数详解 在C#中,构造函数用于初始化对象的实例。在创建对象时,系统会先调用构造函数来初始化该对象的各个成员变量,再返回该对象的引用。因此,在使用对象之前,它必须经过构造函数的初始化。本文将详细讲解C#中构造函数的相关知识,让读者掌握如何创建和使用构造函数。 构造函数的定义 构造函数是一种特殊的函数,它没有返回值,也不需要显式调用,只有在创建对象时才…

    C# 2023年5月15日
    00
  • C#实现将浮点数表示的货币数量以汉字大写形式输出的方法

    实现将浮点数表示的货币数量以汉字大写形式输出,需要以下步骤: 步骤一:将浮点数转为字符串并分离整数部分和小数部分 我们可以使用C#的ToString方法将对应的浮点数转为字符串,并且使用Split方法将整数部分和小数部分分离开。 double money = 123456.78; string moneyStr = money.ToString("…

    C# 2023年6月7日
    00
  • 如何在.Net 7中将Query绑定到数组详解

    以下是关于“如何在 .NET 7 中将 Query 绑定到数组”的完整攻略: 1. 问题描述 在 .NET 7 中,我们经常需要将 Query 绑定到数组。但是,由 .NET 7 中的一些更改,可能会导致以前的方法不再适用。因此,我们需要了解如何在 .NET 7 中将 Query 绑定到数组。 2. 解决方案 要将 Query 绑定到数组,可以使用以下步骤:…

    C# 2023年5月12日
    00
  • 详解如何利用C#实现汉字转拼音功能

    下面是关于如何利用C#实现汉字转拼音功能的完整攻略: 1. 准备工作 实现汉字转拼音需要使用到拼音库,这里我推荐使用Pinyin4Net库。首先需要在VS中安装Pinyin4Net库。 安装方法: 打开VS,创建一个新的C#控制台应用程序。 在解决方案资源管理器中,右键单击该项目,选择“管理NuGet程序包”。 在弹出的NuGet管理器中,搜索“Pinyin…

    C# 2023年6月6日
    00
  • ASP.NET Core WebSocket集群实现思路详解

    以下是关于ASP.NET Core WebSocket集群实现思路的完整攻略: 1. 问题描述 在ASP.NET Core应用程序中我们需要实现WebSocket集群,以便在多个之间共享WebSocket连接。本攻略将介绍如何实现WebSocket集群。 2. 解决方案 在ASP.NET Core中,我们可以使用SignalR来实现WebSocket集群。以…

    C# 2023年5月12日
    00
  • 详解ASP.NET MVC3:Razor的@:和语法

    ASP.NET MVC3 是一种 Web 应用程序框架,可以帮助开发者快速构建 MVC(Model-View-Controller)模式的Web应用程序。而 Razor 是一种模板引擎,帮助开发者在视图(View)中方便地生成 HTML 代码。其中,@: 是 Razor 模板引擎中的一个语法,用于在视图中输出纯文本。 使用 @: @:语法可用于直接在 Raz…

    C# 2023年5月31日
    00
  • Unity调用C++ dll实现打开双目相机

    Unity调用C++ dll实现打开双目相机需要以下几个步骤: 编写C++ dll文件 首先,我们需要编写C++ dll文件。C++ dll文件的作用是实现打开双目相机的操作,并将相机返回给Unity。在C++文件中需要定义一个函数来获取左右相机数据,并返回给C#脚本。以下是C++ dll文件的示例: #include<iostream> #in…

    C# 2023年6月7日
    00
  • .NET Core3.0 日志 logging的实现

    在.NET Core 3.0中,日志记录(logging)是一项非常重要的任务,它可以帮助您跟踪应用程序的运行情况并诊断问题。在本攻略中,我们将详细讲解.NET Core 3.0中日志记录的实现,并提供两个示例说明。 步骤一:安装NuGet包 要使用.NET Core 3.0中的日志记录功能,您需要安装以下NuGet包: Microsoft.Extensio…

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部