winform下的printDocument如何实现打印文件?

陆老师Peter 2019-11-05 05:02:58


我用winform做的一款桌面应用软件,如何实现点击“打印”按钮后,启动打印文件的同时,还把“单双面,A3、A4、A5,打印份数”等这些参数传进去。直接调用打印系统的话没法把这些打印参数传进去。用printDocument的话,是可以设置画笔来画,但是只能打印字符串二没法打印文件。主要难点在于,如何使用printDocument来打印文件。包括文件夹下的文件,以及子文件夹下的文件。
...全文
1196 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
desperaso 2019-11-06
  • 打赏
  • 举报
回复
虽然问题比较多,但基本原理还是能看着参考
https://www.cnblogs.com/qiaoke/p/10365440.html
threenewbee 2019-11-06
  • 打赏
  • 举报
回复
引用 5 楼 小陆Peter 的回复:
[quote=引用 2 楼 nashma.blog.jp的回复:]可以参考一下docs上的这个例子 https://docs.microsoft.com/zh-cn/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms
为什么我按照你的链接里说的去做,打印出来的是乱码[/quote] 文字编码的问题吧,贴出来看看
陆老师Peter 2019-11-06
  • 打赏
  • 举报
回复
问题还没解决,各路大神帮顶上去呀
陆老师Peter 2019-11-06
  • 打赏
  • 举报
回复
引用 2 楼 nashma.blog.jp的回复:
可以参考一下docs上的这个例子 https://docs.microsoft.com/zh-cn/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms
为什么我按照你的链接里说的去做,打印出来的是乱码
陆老师Peter 2019-11-06
  • 打赏
  • 举报
回复
引用 3 楼 caozhy的回复:
https://www.cnblogs.com/NoRoad/p/6255916.html
你这个打印的是字符串,我是要打印文件
mslearn-nashma 2019-11-06
  • 打赏
  • 举报
回复
引用 9 楼 小陆Peter 的回复:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Printing;
using System.Text;

namespace PrintApp
{
public partial class Form1 : Form
{
//public Form1()
//{
// InitializeComponent();
//}
private Button printButton;
private PrintDocument printDocument1 = new PrintDocument();
private string stringToPrint;
public Form1()
{
this.printButton = new System.Windows.Forms.Button();
this.printButton.Location = new System.Drawing.Point(12, 51);
this.printButton.Size = new System.Drawing.Size(75, 23);
this.printButton.Text = "Print";
this.printButton.Click += new System.EventHandler(this.printButton_Click);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.printButton);

// Associate the PrintPage event handler with the PrintPage event.
printDocument1.PrintPage +=
new PrintPageEventHandler(printDocument1_PrintPage);
}

private string ReadFile(string fileName,Encoding encoding)
{
if(!File.Exists(fileName))
{
throw new FileFormatException("文件不存在");
}
//string docName = "打印测试文档(机试).docx";
//string docPath = @"C:\Users\Administrator\Desktop\";
//printDocument1.DocumentName = docName;
//using (FileStream stream = new FileStream(docPath + docName, FileMode.Open))
else
{
using (StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open), encoding))
{
stringToPrint = reader.ReadToEnd();
}
MessageBox.Show(stringToPrint);
return stringToPrint;
}
}

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
int charactersOnPage = 0;
int linesPerPage = 0;

// 将charactersOnPage的值设置为stringToPrint的字符数,该字符数将适合页面的边界。
e.Graphics.MeasureString(stringToPrint, this.Font,
e.MarginBounds.Size, StringFormat.GenericTypographic,
out charactersOnPage, out linesPerPage);

// 在页面边界内绘制字符串
e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
e.MarginBounds, StringFormat.GenericTypographic);

// 删除已打印的字符串部分。
stringToPrint = stringToPrint.Substring(charactersOnPage);

// 检查是否要打印更多页。
e.HasMorePages = (stringToPrint.Length > 0);
}

private void printButton_Click(object sender, EventArgs e)
{
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF8);//不适用于pdf。
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.Default);//Default适用于txt格式,不适用于docx格式,不适用于pdf。
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.Unicode);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF32);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.ASCII);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF7);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.BigEndianUnicode);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.BigEndianUnicode);//不适用于pdf
ReadFile(@"C:\Users\Administrator\Desktop\测试打印.txt", Encoding.GetEncoding("GBK"));//不适用于pdf,适用于txt

printDocument1.Print();
}
}
}
我回到家给你看看哦
陆老师Peter 2019-11-06
  • 打赏
  • 举报
回复
引用 6 楼 caozhy的回复:
[quote=引用 5 楼 小陆Peter 的回复:] [quote=引用 2 楼 nashma.blog.jp的回复:]可以参考一下docs上的这个例子 https://docs.microsoft.com/zh-cn/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms
为什么我按照你的链接里说的去做,打印出来的是乱码[/quote] 文字编码的问题吧,贴出来看看[/quote] 代码贴出来了。TXT正常,PDF和Word还是乱码,
陆老师Peter 2019-11-06
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Printing;
using System.Text;

namespace PrintApp
{
public partial class Form1 : Form
{
//public Form1()
//{
// InitializeComponent();
//}
private Button printButton;
private PrintDocument printDocument1 = new PrintDocument();
private string stringToPrint;
public Form1()
{
this.printButton = new System.Windows.Forms.Button();
this.printButton.Location = new System.Drawing.Point(12, 51);
this.printButton.Size = new System.Drawing.Size(75, 23);
this.printButton.Text = "Print";
this.printButton.Click += new System.EventHandler(this.printButton_Click);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.printButton);

// Associate the PrintPage event handler with the PrintPage event.
printDocument1.PrintPage +=
new PrintPageEventHandler(printDocument1_PrintPage);
}

private string ReadFile(string fileName,Encoding encoding)
{
if(!File.Exists(fileName))
{
throw new FileFormatException("文件不存在");
}
//string docName = "打印测试文档(机试).docx";
//string docPath = @"C:\Users\Administrator\Desktop\";
//printDocument1.DocumentName = docName;
//using (FileStream stream = new FileStream(docPath + docName, FileMode.Open))
else
{
using (StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open), encoding))
{
stringToPrint = reader.ReadToEnd();
}
MessageBox.Show(stringToPrint);
return stringToPrint;
}
}

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
int charactersOnPage = 0;
int linesPerPage = 0;

// 将charactersOnPage的值设置为stringToPrint的字符数,该字符数将适合页面的边界。
e.Graphics.MeasureString(stringToPrint, this.Font,
e.MarginBounds.Size, StringFormat.GenericTypographic,
out charactersOnPage, out linesPerPage);

// 在页面边界内绘制字符串
e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
e.MarginBounds, StringFormat.GenericTypographic);

// 删除已打印的字符串部分。
stringToPrint = stringToPrint.Substring(charactersOnPage);

// 检查是否要打印更多页。
e.HasMorePages = (stringToPrint.Length > 0);
}

private void printButton_Click(object sender, EventArgs e)
{
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF8);//不适用于pdf。
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.Default);//Default适用于txt格式,不适用于docx格式,不适用于pdf。
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.Unicode);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF32);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.ASCII);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF7);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.BigEndianUnicode);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.BigEndianUnicode);//不适用于pdf
ReadFile(@"C:\Users\Administrator\Desktop\测试打印.txt", Encoding.GetEncoding("GBK"));//不适用于pdf,适用于txt

printDocument1.Print();
}
}
}
陆老师Peter 2019-11-06
  • 打赏
  • 举报
回复
引用 6 楼 caozhy的回复:
[quote=引用 5 楼 小陆Peter 的回复:] [quote=引用 2 楼 nashma.blog.jp的回复:]可以参考一下docs上的这个例子 https://docs.microsoft.com/zh-cn/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms
为什么我按照你的链接里说的去做,打印出来的是乱码[/quote] 文字编码的问题吧,贴出来看看[/quote] 加了编码格式以后,txt类的文件正常了,PDF和word打出来的还是乱码
threenewbee 2019-11-05
  • 打赏
  • 举报
回复
https://www.cnblogs.com/NoRoad/p/6255916.html
mslearn-nashma 2019-11-05
  • 打赏
  • 举报
回复
可以参考一下docs上的这个例子 https://docs.microsoft.com/zh-cn/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms
第2章 QQ企业通    2.1 设计思路 28   2.2 关键技术 28   2.2.1 INI文件的应用 28   2.2.2 线程的应用 30   2.2.3 在Socket中发送大容量的消息 30   2.2.4 将流序列化或反序列化为对象 31   2.2.5 用InnerList列表记录信息 31   2.3 设计过程 32   2.3.1 类库的设计 33   2.3.2 客户端注册模块设计 40   2.3.3 客户端登录模块设计 42   2.3.4 客户端QQ模块设计 43   2.3.5 客户端消息发送模块设计 48   2.3.6 服务器端控制台模块设计 52 第3章 SQL数据表提取器模块    3.1 概述 56   3.2 关键技术 56   3.2.1 如何备份数据库 56   3.2.2 如何还原数据库 57   3.2.3 如何附加数据库 58   3.2.4 如何分离数据库 59   3.2.5 设置数据库模式 59   3.3 设计过程 61   3.3.1 主窗体 61   3.3.2 获取服务器名称 62   3.3.3 获取所有数据库 63   3.3.4 获取所有数据表 64   3.3.5 备份数据库 66   3.3.6 还原数据库 67   3.3.7 附加数据库 68   3.3.8 分离数据库 70   3.3.9 导出表结构 71   3.3.10 导出数据 74 第4章 万能搜索模块    4.1 设计思路 80   4.2 关键技术 80   4.2.1 如何制作一个接口程序 80   4.2.2 实现接口程序的信息互传 80   4.2.3 如何将接口程序加载到其他程序中 82   4.2.4 怎样操作RichtextBox控件的选择文本 82   4.2.5 如何获取数据表中字段的描述信息 83   4.3 设计过程 83   4.3.1 获取数据表中字段的中文信息 84   4.3.2 添加数据表的查询条件 86   4.3.3 向SQL语句中添加括号 89   4.3.4 查询生成后的SQL语句 90   4.3.5 主程序获得接口信息 92 第5章 万能打印模块    5.1 设计思路 94   5.2 关键技术 94   5.2.1 打印设置(PrintDocument类) 94   5.2.2 打印预览对话框(PrintPreview Dialog) 95   5.2.3 打印对话框(PrintDialog) 96   5.2.4 获取指定颜色值和字体样式 97   5.2.5 DataGridView控件的相关应用 97   5.3 设计过程 98   5.3.1 打印信息的设置 98   5.3.2 表格样式的设置 100   5.3.3 打印类的设置 101   5.3.4 打印数据信息 108 第6章 决策分析模块    6.1 设计思路 112   6.2 关键技术 112   6.2.1 游标的基本操作 112   6.2.2 存储过程的基本操作 115   6.2.3 透视表的基本概念 117   6.2.4 统计表的基本操作 117   6.2.5 单击显示右键菜单 118   6.3 设计过程 118   6.3.1 主窗体的初始化 119   6.3.2 透视表的筛选 127   6.3.3 透视表的设计 130   6.3.4 统计表的设计 132 第7章 自定义图表控件    7.1 设计思路 136   7.2 关键技术 137   7.2.1 控件的生成 137   7.2.2 如何在项目中添加控件 137   7.2.3 在“属性”对话框中添加属性 137   7.2.4 用GDI+绘制图形 139   7.2.5 如何在控件上绘制图形 143   7.2.6 获取扇形外弧中心点的位置 143   7.3 设计过程 144   7.3.1 向自定义控件中添加属性 144   7.3.2 获取绘制图表的初始值数据 149   7.3.3 绘制标签框 153   7.3.4 绘制图表中的表格 157   7.3.5 绘制条形图 163   7.3.6 绘制面形图 170   7.3.7 绘制饼形图 174 第8章 电子邮件收发模块    8.1 概述 180   8.2 关键技术 180   8.2.1 Base64编码格式 180   8.2.2 SMTP服务 181   8.2.3 POP3协议 184   8.2.4 使用Jmail组件接收邮件 186   8.2.5 邮件发送类的使用 188   8.2.6 使用正则表达式验证邮件格式 190   8.3 设计过程 191   8.3.1 数据库设计 191   8.3.2 系统登录 191   8.3.3 邮件发送实现 192   8.3.4 为邮件上传多个附件 193   8.3.5 邮件接收实现 194   8.3.6 查看邮件详细信息 196   8.3.7 下载附件的实现 197   8.3.8 删除邮件实现 198   8.3.9 用户管理 198 第9章 短信群发模块    9.1 设计思路 202   9.2 关键技术 202   9.2.1 短信猫中API函数的使用 202   9.2.2 短信猫中的短信接收格式 205   9.2.3 窗体间的互操作 205   9.2.4 锁定模块主窗体 206   9.2.5 使用ADO.NET连接Access数据库 206   9.3 设计过程 207   9.3.1 数据库设计 207   9.3.2 群发短信实现 209   9.3.3 已发送短信管理 213   9.3.4 接收短信实现 215   9.3.5 常用联系人管理 219   9.3.6 常用短语管理 221 第10章 桌面精灵模块    10.1 概述 226   10.2 关键技术 226   10.2.1 阴阳历转换算法 226   10.2.2 调用系统API实现鼠标穿透效果 230   10.2.3 修改注册表控制程序开机自启动 231   10.2.4 通过控制窗体透明度实现日历透明显示效果 231   10.2.5 拖动无标题栏窗体 232   10.2.6 将窗体的关闭位置写入到注册表中 232   10.2.7 将程序图标写入到托盘 232   10.3 设计过程 233   10.3.1 桌面精灵模块公共类设计 233   10.3.2 当前日期的农历、天干地支年、节日及星座显示 235   10.3.3 定时提醒的实现 240   10.3.4 日历窗体效果控制 242   10.3.5 转到某天、某周、某月及某年的实现 243   10.3.6 节日管理 245   10.3.7 提醒管理 249 第11章 文件批量处理器    11.1 概述 256   11.2 关键技术 256   11.2.1 文件流技术 256   11.2.2 文件解压缩技术 258   11.2.3 获取系统文件及文件夹图标 262   11.2.4 获取指定目录下的所有文件及文件夹 265   11.2.5 Word操作技术 266   11.2.6 进度条的显示 266   11.2.7 对ListView控件中的项进行排序 267   11.3 设计过程 267   11.3.1 主窗体预览 267   11.3.2 批量复制、剪切文件 268   11.3.3 批量复制、剪切文件夹 270   11.3.4 批量重命名文件 271   11.3.5 批量删除文件及文件夹 275   11.3.6 搜索文件及文件夹 276   11.3.7 批量压缩、解压文件 278   11.3.8 分割、合并文件 280 第12章 图片管理工具模块    12.1 概述 286   12.2 关键技术 286   12.2.1 上下移动ListBox选中项 286   12.2.2 将文件复制到剪切板 287   12.2.3 格式转换 288   12.2.4 图片幻灯片 288   12.2.5 图片旋转 289   12.3 设计过程 290   12.3.1 主窗体 290   12.3.2 打开图片目录 291   12.3.3 图片格式转换 292   12.3.4 设为桌面背景 294   12.3.5 图片特效 296   12.3.6 图片调节 300   12.3.7 图片水印 304   12.3.8 幻灯片放映 306   12.3.9 图片打印 308 、
很好的C#培训教程,适合初学者使用 目 录 1 .NET体系结构 7 1.1 什么是.NET Framwork? 7 1.2 .NET Framework的内容 7 1.3 如何用.NET Framework编写应用程序 8 1.4 MSIL和JIT 8 1.5 程序集 9 1.6 托管代码 9 1.7 垃圾回收 9 1.8 链接 10 1.9 实例分析 11 1.10 内容总结 13 1.11 独立实践 14 2 C#基础 15 2.1 面向对象基本概念 15 2.2 变量 18 2.3 常量 22 2.4 预定义数据类型 22 2.5 流控制 28 2.6 数组 37 2.7 命名空间 38 2.8 C#预处理器指令 44 2.9 C#编程规则 46 2.10 内容总结 50 2.11 独立实践 50 3 对象和结构 52 3.1 类和结构 52 3.2 类和成员 53 3.3 构造函数 60 3.4 结构 65 3.5 部分类 68 3.6 内容总结 72 3.7 独立实践 72 4 继承 73 4.1 继承的类型 73 4.2 结构和类 75 4.3 调用函数的基类版本 76 4.4 抽象类和抽象函数 77 4.5 密封类和密封方法 79 4.6 修饰符 80 4.7 接口 81 4.8 内容总结 86 4.9 独立实践 86 5 委托与事件 88 5.1 事件的原理 88 5.2 简单的自定义事件 89 5.3 预定义事件处理机制 92 5.4 内容总结 100 5.5 独立实践 100 6 运算符和类型强制转换 101 6.1 运算符 101 6.2 运算符的简化操作 102 6.3 类型的安全性 107 6.4 类型转换 108 6.5 装箱和拆箱 111 6.6 对象的相等比较 112 6.7 引用类型的相等比较 112 6.8 运算符重载 114 6.9 运算符的工作方式 114 6.10 用户定义的数据类型转换 118 6.11 执行用户定义的类型转换 119 6.12 多重数据类型转换 126 6.13 内容总结 130 6.14 独立实践 131 7 字符串与正则表达式 132 7.1 System.String类 132 7.2 StringBuilder成员 135 7.3 字符串的格式化 138 7.4 正则表达式概述 142 7.5 内容总结 149 7.6 独立实践 150 8 集合 151 8.1 集合 151 8.2 索引器 152 8.3 集合接口 155 8.4 字典 157 8.4.1 现实生活中的字典 158 8.4.2 .NET中的字典 158 8.4.3 字典的工作情况 160 8.5 内容总结 167 8.6 独立实践 167 9 错误与异常 168 9.1 错误和异常 168 9.2 捕获异常 170 9.3 System.Exception属性 177 9.4 嵌套的 try块 178 9.5 用户定义的异常类 180 9.6 内容总结 189 9.7 独立实践 189 10 内存管理与指针 190 10.1 后台内存管理 190 10.2 值数据类型 190 10.3 引用数据类型 192 10.4 垃圾收集 194 10.5 释放未托管的资源 195 10.6 析构函数 195 10.7 IDisposable接口 196 10.8 实现IDisposable接口和析构函数 198 10.9 不安全的代码 199 10.10 指针 200 10.11 使用指针优化性能 213 10.12 内容总结 217 11 泛型 218 11.1 泛型的概念 218 11.2 使用泛型 219 11.3 可空类型 219 11.4 运算符和可空类型 220 11.5 System.Collections.Generic命名空间 227 11.6 定义泛型类 237 11.7 default关键字 239 11.8 约束类型 240 11.9 从泛型类中继承 247 11.10 泛型运算符 248 11.11 泛型结构 250 11.12 定义泛型接口 250 11.13 定义泛型方法 251 11.14 定义泛型委托 253 11.15 独立实践 253 12 反射 254 12.1 定制特性 254 12.2 编写定制特性 255 12.3 指定特性参数 258 12.4 VectorClass程序集 261 12.5 反射 263 12.6 查找定制特性 269 12.7 内容总结 273 13 线程 274 13.1 线程 274 13.2 多线程应用程序 275 13.3 线程的处理 276 13.4 线程的优先级 282 13.5 同步 283 13.6 同步问题 285 13.7 内容总结 288 14 Winform基本概念 289 14.1 .NET Windows应用程序开发 289 14.2 .NET框架类库简介 289 14.3 事件和事件处理程序 290 14.4 事件参数 290 14.5 Windows 应用程序 290 14.6 窗体属性、方法和事件 291 14.7 this 关键字 292 14.8 控件概念 292 14.9 各种类型控件 292 14.10 控件的一些通用属性 294 14.11 标签、文本框、按钮控件简介 295 14.12 列表框控件简介 296 14.13 复选列表框 296 14.14 组合框 296 14.15 内容总结 302 15 Winform控件 303 15.1 控件分类 303 15.2 在窗体之间建立链接 307 15.3 应用程序的启动和关闭 308 15.4 内容总结 308 16 高级用户界面 309 16.1 打印控件的使用 309 16.2 PrintDocument组件 309 16.3 PrintPreviewControl组件 310 16.4 PrintDialog 组件 310 16.5 PrintPreviewDialog组件 311 16.6 PageSetUpDialog控件 311 16.7 对话框 311 16.8 通用对话框 312 16.9 OpenFileDialog控件 312 16.10 SaveFileDialog控件 312 16.11 FontDialog控件 312 16.12 ColorDialog控件 312 16.13 MessageBox消息框 313 16.14 WinForms 中的可视效果 314 16.15 内容总结 315 17 MDI应用程序 316 17.1 SDI程序 316 17.2 MDI程序 316 17.3 MenuStrip和ToolStripMenuItem 317 17.4 toolStrip控件简介 318 17.5 StatusStrip控件 320 17.6 创建对话框 320 17.7 内容总结 321 18 ADO.NET编程 322 18.1 简介 322 18.2 ADO.NET 的优点 322 18.3 ADO.NET 结构 324 18.4 ADO.NET 的基本组件 325 18.5 DataReader 328 18.6 获取单个值 328 18.7 修改数据库中的数据 329 18.8 从SQL Server获取XML数据 329 18.9 DataAdapter 330 18.10 数据集:DataSet 330 18.11 DataTable 330 18.12 DataView 332 18.13 关系 332 18.14 数据绑定 333 18.15 DataRow 简介 335 18.16 操纵数据源中的值 336 18.17 内容总结 336 19 GDI+ 编程 337 19.1 理解绘图规则 337 19.2 测量坐标和区域 341 19.3 绘制可滚动的窗口 343 19.4 颜色 348 19.5 画笔和钢笔 351 19.6 绘制图形和线条 352 19.7 显示图像 355 19.8 绘制文本 357 19.9 字体和字体系列 359 19.10 内容总结 363 20 自定义控件 364 20.1 添加事件处理程序 368 20.2 添加更多的属性 370 20.3 内容总结 372 21 部署与安装 373 21.1 部署的设计 373 21.2 无干涉部署 387 21.3 内容总结 394 22 ASP.NET与Web窗口简介 395 22.1 应用程序方案 395 22.2 Web 应用程序开发周期 399 五个对象实现了服务器端的请求 403 22.3 ASP.NET 的演变 404 22.4 Global.asax 文件 405 22.5 发布网站 408 22.6 内容总结 408 23 ASP.NET中的内置对象 409 23.1 ASP.NET页面 409 23.2 虚拟目录 421 23.3 内容总结 423 24 Web服务器控件 424 24.1 Web 控件 424 24.2 复杂控件 429 24.3 内容总结 431 25 HTML控件 432 25.1 服务器控件 432 25.2 HTMLForm控件 432 25.3 Web服务器控件优缺点 433 25.4 HTML服务器控件优缺点 433 25.5 使用服务器控件设计页面建议 433 25.6 内容总结 439 26 深入服务器对象 440 26.1 Global.asax文件简介 441 26.2 Application 对象 446 26.3 HttpServerUtility类和Server对象 446 26.4 HttpSessionState类和Session对象 448 26.5 内容总结 449 27 ADO.NET WEB应用 450 27.1 回顾ADO.NET 450 27.2 模板概念 464 27.3 ASP.NET 中的数据处理 465 27.4 内容总结 466 28 WEB服务器基础 467 28.1 ASP.NET Web 服务 467 28.2 编写简单的 Web 服务 468 28.3 内容总结 470 28.4 独立实践 470 29 用户控件 471 29.1 用户控件开发 471 29.2 内容总结 479 29.3 独立实践 480 30 Web部署 481 30.1 使用XCOPY部署 481 30.2 使用Visual studio的Copy Web Site功能部署 482 30.3 使用Visual Studio的Precompilation预编译部署 482 30.4 内容总结 483 30.5 独立实践 484

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧