202109-18 C#设置Word文本框中改变文字方向的方法 在Word中可插入文本框,默认情况下插入的文本框中的文字方向为横向排列,对于一些特殊文档的设计要求,需要改变文字方向,如本次测试中的文档排版为考生试卷类型,考生信息栏的内容为下图中的这种,本文将以C#程序代码为例,展示如何来实现这种排版。另附VB.NET代码供参考。测试程序环境如下:VisualStudio2017.netframework4.8Freespire.doc.dll7.11测试word文档:.docx2013关于dll安装:在程序中通过nuget... 继续阅读 >
202109-16 C# 使用Word模板导出数据的实现代码 使用NPOI控件导出数据到Word模板中方式:效果如下:Word模板:运行结果:实现如下:Student.csusingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceExportWord{publicclassStudent{publicStringPhoto{get;set;}publicFileStreamPhotoData{ge... 继续阅读 >
202109-14 c# 编写的简单飞行棋游戏 目录项目效果实现代码基于winform制作的图形界面程序效果代码项目效果实现代码usingSystem;namespace飞行棋项目{classProgram{///1、画游戏头///2、初始化地图///把整数数组中数字编程控制台中显示的特殊字符显示的过程,就是初始化地图///3、画地图///4、玩游戏//我们用静态数组用来模拟全局变量,这个数组代表地图长度以及地图坐标publicstaticint[]Maps... 继续阅读 >
202109-14 c#使用FreeSql生产环境时自动升级备份数据库 目录项目场景:解决方案:概要描述:详细说明:总结:项目场景:使用FreeSql,包含所有的ORM数据库,都会存在这样的问题。在codefirst模式下,根据代码自动更新数据库,都建议不要在生产环境使用。为什么呢?其实不建议使用,主要是根据代码自动生成数据时,极有可能会造成数据的丢失,比如修改字段类型,自动更新的结果可能并不是自己想的。但是有一些使用场景是需要在生产环境自动升级的,比如我们有一个CS客户端的产品,客户本... 继续阅读 >
202109-14 c# Struct的一些问题分析 目录与类的区别:Struct的理论看过好一些,可是工作上基本没有应用过,Class倒处处都有。难道Struct就没有什么使用价值吗?搜了一下如何在类和结构中做出选择?✔️如果类型的实例很小且通常寿命很短或通常嵌入其他对象中,请考虑定义结构而不是类。❌避免定义结构,除非该类型具有以下所有特征:它在逻辑上表示单个值,类似于原始类型(int,double等)。它的实例大小低于16字节。它是不可变的。它不必经常... 继续阅读 >
202109-14 c# 实现RSA非对称加密算法 目录公钥与私钥C#实现公钥与私钥公钥与私钥是成对的,一般的,我们认为的是公钥加密、私钥解密、私钥签名、公钥验证,有人说成私钥加密,公钥解密时不对的。公钥与私钥的生成有多种方式,可以通过程序生成(下文具体实现),可以通过openssl工具:#生成一个私钥,推荐使用1024位的秘钥,秘钥以pem格式保存到-out参数指定的文件中,采用PKCS1格式opensslgenrsa-outrsa.pem1024#生成与私... 继续阅读 >
202109-13 如何使用C#扫描并读取图片中的文字 目录程序测试环境:详细步骤程序测试环境:VisualStudio版本要求不低于2017图片扫描工具:Spire.OCRfor.NET图片格式:png(这里的图片格式支持JPG、PNG、GIF、BMP、TIFF等格式)扫描的图片文字:中文(另可支持中文、英语、日语、韩语、德语、法语等).NetCore2.1详细步骤1.创建一个.NetCore控制台应用程序。2.通过NuGet添加依赖(1)在【解决方案资源管理器】中,鼠标右键点击【依赖项】,选择【管理... 继续阅读 >
202109-07 C# 减少嵌套循环的两种方法 目录eg1:一个简单的key对应一条dataroweg2:一个拼装的Key对应多条DataRow的字典当然,除了关注明显的循环例如for、foreach,还应该关注隐晦一点的循环,例如datatable.select(),linq之类的list.where、list.find等。要优化,排除业务问题,要考虑的就是代码技术了。看到循环查找数据,尽可能向Dictionary靠拢。eg1:一个简单的key对应一条datarow优化前:usingSystem.Linq;namespaceConsoleApp1{internalclassProgram... 继续阅读 >
202109-07 C# 基于NPOI操作Excel 目录1单元格下拉框2添加批注3读取数据结语常见问题解决NPOI导出添加批注功能POI导出Excel时下拉列表值超过255的问题日期格式导入混乱注意1单元格下拉框在开发中我们会遇到为单元格设置下拉框。一般可以编写如下:varcellRanges=newCellRangeAddressList(firstRow,lastRow,firstCol,latsCol);DVConstraintconstraint=DVConstraint.CreateExplicitListConstraint(stringArray);HSSFDataValidationvalidate=newHSS... 继续阅读 >
202109-07 C# 基于NPOI操作Excel 目录1单元格下拉框2添加批注3读取数据结语常见问题解决NPOI导出添加批注功能POI导出Excel时下拉列表值超过255的问题日期格式导入混乱注意1单元格下拉框在开发中我们会遇到为单元格设置下拉框。一般可以编写如下:varcellRanges=newCellRangeAddressList(firstRow,lastRow,firstCol,latsCol);DVConstraintconstraint=DVConstraint.CreateExplicitListConstraint(stringArray);HSSFDataValidationvalidate=newHSS... 继续阅读 >
202109-04 c# Winform同一数据源多个控件保持同步 在了解Windows窗体数据绑定直接,对控件数据绑定一般都是直接对控件可接收值的属性赋值,如文本框的Text属性,但在做一些列表数据处理时,同一份数据要多处处理,对各个控件的属性逐一赋值显得比较麻烦。通过对控件属性设置数据源绑定,利用Windows数据更改通知这一特性,只要订阅(设定绑定)的控件都能接收到数据的变化通知。通过DataBindings方法实现双向数据绑定textBox1.DataBindings.Add("Text",trackBar1,"Value",true,Da... 继续阅读 >
202109-04 c# 如何实现web打印插件 目录客户端程序(Winform)1、监听Web端的WebSocket消息,这里有用到三方包:Fleck,开箱即用,非常方便。2、处理Html,将Html转换为图片:3、打印图片其他的实现思路第一种第二种最近,客户有个需求过来,Web端无预览打印,美其名曰:快捷打印。当时第一反应就是找插件,拿来主义永远不过时。找了一圈发现,免费的有限制,没限制的需要收费(LODOP真的好用)。说来就是一个简单的无预览打印,收费的诸多功能都无用武之地,总的来... 继续阅读 >
202108-26 C#中的Task.Delay()和Thread.Sleep()区别(代码案例) 一、简介1.Thread.Sleep()是同步延迟,Task.Delay()是异步延迟。2.Thread.Sleep()会阻塞线程,Task.Delay()不会。3.Thread.Sleep()不能取消,Task.Delay()可以。4.Task.Delay()实质创建一个运行给定时间的任务,Thread.Sleep()使当前线程休眠给定时间。5.反编译Task.Delay(),基本上讲它就是个包裹在任务中的定时器。6.Task.Delay()和Thread.Sleep()最大的区别是Task.Delay()旨在异步运行,在同步代码中使用Task.Delay()是没有意义... 继续阅读 >
202108-26 C#中的Task.Delay()和Thread.Sleep()区别(代码案例) 一、简介1.Thread.Sleep()是同步延迟,Task.Delay()是异步延迟。2.Thread.Sleep()会阻塞线程,Task.Delay()不会。3.Thread.Sleep()不能取消,Task.Delay()可以。4.Task.Delay()实质创建一个运行给定时间的任务,Thread.Sleep()使当前线程休眠给定时间。5.反编译Task.Delay(),基本上讲它就是个包裹在任务中的定时器。6.Task.Delay()和Thread.Sleep()最大的区别是Task.Delay()旨在异步运行,在同步代码中使用Task.Delay()是没有意义... 继续阅读 >
202108-26 C#中Abstract 、Virtual和Override的使用及区别 1.abstract修饰符指示所修饰的内容缺少实现或未完全实现。abstract修饰符可用于类、方法、属性、索引器和事件。在类声明中使用abstract修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。(1)抽象类具有以下特性:1)抽象类不能实例化。2)抽象类可以包含抽象方法和抽象访问器。3)不能用sealed修饰符修饰抽象类,因为这两个修饰符的含义是相反的。采用sealed修饰符的类无... 继续阅读 >
202107-30 C#基础知识之GetType与typeof的区别小结 在实际开发中经常需要了解具体对象的类型,所以经常会使用GetType()和typeof()、尽管可以得到相应的类型、但两者之间也存在一些差别,接下来我们一起来了解一下吧。一、GetType()与typeof() 1、typeof():typeof运算符用于获取某个类型的System.Type实例。typeof运算符的实参必须是类型或类型形参的名称,如以下示例所示:控制台输出:Console.WriteLine($"得到类型为:{typeof(int)}");Console.WriteLine($"得到类型为:{ty... 继续阅读 >