- 博客(183)
- 资源 (42)
- 收藏
- 关注
原创 基于委托多窗体实现
this.txtContent.Text += $"来自:{childName} 的消息:{msg}\r\n";//这种方式也不允许的。FrmChild child = new FrmChild($"子窗体:{i + 1}");//第3步:激发事件(调用委托)//第4步:编写事件响应方法。//第2步:定义一个事件。//第5步:关联事件。//第5步:移除事件。//第1步:声明委托。
2024-08-06 10:35:46 252
原创 XML节点值递归加密解密
public partial class MainWindow : Window{ public MainWindow() { InitializeComponent(); } #region Base64加密解密 /// <summary> /// Base64是一種使用64基的位置計數法。它使用2的最大次方來代表僅可列印的ASCII 字元。 /// 這使它可用來作為電子郵件的傳輸編碼。在Base6
2024-08-06 09:40:25 570
原创 将用户控件嵌入到 Excel 窗口中
/ 将用户控件嵌入到 Excel 窗口中。// 获取 Excel 主窗口句柄。// 调整用户控件的位置和大小。// Windows API 函数声明。// 创建用户控件实例。
2024-07-19 10:37:21 582
原创 .NET 一些常用的类型转换扩展
// 将object转换为demical,若转换失败,则返回指定值。/// 将object转换为double,若转换失败,则返回指定值。/// 将object转换为demical,若转换失败,则返回0。/// 将object转换为long,若转换失败,则返回指定值。/// 将object转换为bool,若转换失败,则返回指定值。/// 将object转换为long,若转换失败,则返回0。/// 将object转换为int,若转换失败,则返回指定值。/// 删除最后结尾的指定字符后的字符。
2024-06-21 14:00:30 412
原创 要使 WinForms(Windows Forms)应用程序识别高 DPI 分辨率并正确缩放显示元素
要使 WinForms(Windows Forms)应用程序识别高 DPI 分辨率并正确缩放显示元素,可以通过配置应用程序清单文件和应用程序配置文件来实现。通常,WinForms 应用程序会自动处理大多数 DPI 变化,但在某些情况下,您可能需要手动调整控件大小和字体。通过以上配置和代码设置,您的 WinForms 应用程序将能够识别和处理高 DPI 分辨率,从而在高分辨率显示器上正确缩放和显示用户界面元素。1. 如果项目中没有 `app.config` 文件,请添加一个。
2024-06-14 17:18:11 684
原创 winform 应用程序 添加 wpf控件后影响窗体DPI改变
第二步:把这段配置 注释放开,第一个配置true 改成false。第一步:添加 应用程序清单文件 app.manifest。
2024-06-14 14:48:55 434
原创 使用C#创建安装Windows服务程序(干货)
Windows服务是在Windows操作系统上,以后台形式运行的应用程序。它们可以在系统启动时自动启动,并且独立于用户登录。Windows服务通常用于执行那些长时间运行、无需用户交互或需要在后台持续执行的任务。
2024-06-07 14:00:51 2040
原创 C# - 委托与事件
委托是C#中的一种类型,用于存储对方法的引用。它允许将方法作为参数传递给其他方法,实现回调、事件处理和动态调用等功能。通俗来讲,就是委托包含方法的内存地址,方法匹配与委托相同的签名,因此通过使用正确的参数类型来调用方法。
2024-06-06 11:10:28 419
原创 vsto Excel插件模拟撤销恢复
/ 一旦有新的操作,恢复栈应该清空。/// 设计器支持所需的方法 - 不要修改。// 创建相应的恢复操作。/// 使用代码编辑器修改此方法的内容。#region VSTO 生成的代码。// 将撤销操作添加到栈中。// 绑定工作簿变化事件。// 捕捉单元格变化。
2024-06-05 14:24:29 520
原创 使用Visual Studio 分析.NET Dump
内存泄漏和高CPU使用率是在日常开发中经常遇到的问题,它们可能会导致应用程序性能下降甚至崩溃。今天我们来讲讲如何使用Visual Studio 2022分析.NET Dump,快速找到程序内存泄漏问题。Dump文件又叫内存转储文件或者叫内存快照文件。用于存储程序运行时的状态信息的文件,这些文件通常包含了程序运行时的内存内容、线程信息、堆栈调用信息、异常信息等数据。Dump文件可以在程序崩溃、失去响应、资源消耗过高或者性能不理想等情况下生成,以帮助开发人员进行故障排查和调试。
2024-06-05 10:23:11 496
原创 C# 工厂模式学习
接口:定义了一组必须实现的方法和属性,没有实现代码。支持多重继承,使得类可以实现多个接口。继承:用于从现有类创建新类,继承基类的成员。每个类只能有一个基类,但可以实现多个接口。结合使用:通过将接口和继承结合使用,可以实现代码的高复用性和灵活性。通过上述示例,可以看到如何使用接口和继承来设计灵活且可扩展的应用程序结构。这样既能充分利用基类的通用功能,又能通过接口实现特定的行为。
2024-05-31 11:13:39 1193
原创 获取 Excel 单元格的条件格式是否成立及其改变后的属性(如背景颜色)
获取 Excel 单元格的条件格式是否成立及其改变后的属性(如背景颜色),直接通过 VSTO API 是有挑战的,因为条件格式的实际应用效果在 Excel 的内部逻辑中,并不直接暴露给外部 API。尽管如此,可以通过一些工作方式来判断条件格式的成立,并获取单元格的最终显示效果。以下是一个更直接的方法来获取条件格式应用后的背景色。这个方法依赖于 Excel 的显示属性,而不是条件格式的定义。
2024-05-29 14:17:29 574
原创 C# 异步和线程的区别
然而,如果你需要更多的控制(如线程优先级、线程池管理等),那么可能需要使用线程。异步操作不会创建新的线程,它们依赖于异步框架(如基于事件的异步模式(EAP)、基于任务的异步模式(TAP)、异步流(IAsyncEnumerable)和异步任务(Task、ValueTask)等)来管理执行流。与此不同,线程处理是更底层的概念,它允许你创建和管理独立执行的线程。每个线程有自己的调用栈和上下文,可以执行独立的任务。线程由操作系统管理,你可以在程序中创建和销毁线程,并能对其进行操作(如暂停、继续、优先级设置等)。
2024-03-26 11:00:56 410
原创 一个操作让数组处理速度快了5倍,到底是为什么
这就意味着在主循环中,对数组的访问会更加连续,这有助于提高缓存的命中率(cache hit rate)。在主循环中,对data数组的访问是顺序的,即按照数组元素的顺序依次访问。在没有排序的情况下,由于数组的内存布局是随机的,这可能导致对内存的随机访问,而这种随机访问可能导致较多的缓存缺失(cache misses)。通过对数组进行排序,代码更好地利用了缓存,从而提高了程序的性能。今天做一个数组数据计算时,发现一个效率问题,给大家分享一下 一个数组排序和不排序时同样的逻辑处理速度是不一样的。
2024-03-25 10:05:05 356
原创 浅谈WPF之MVVM工具包
点击项目右键,选择“管理NuGet程序包”,打开NuGet管理窗口,然后搜索“CommunityToolkit.Mvvm”,进行安装即可,目前最新版本为8.2.2。在之前的WPF示例中,都会用到一个MVVM框,也是一个比较常的MVVM框架,就是MVVM工具包【CommunityToolkit.Mvvm】,今天专门以一个简单的小例子,简述一下MVVM工具包的常见用法,仅供学习分享使用,如有不足之处,还请指正。在本实例中,只是简单介绍了MVVM工具包的使用,如若想具体了解更详细内容,可参考官方文档,
2024-03-25 09:39:44 1561
原创 设计模式 之 策略模式
策略模式是一种定义一系列算法的方法,以相同的方式调用不同的算法,减少了各种算法类与使用算法类之间的耦合。它的重心不是如何实现算法,而是如何组织,调用这些算法。从而让程序结构更灵活,具有更好的维护性和扩展性。还可以通过简单工厂模式来优化 组织策略上下文类 ,让客户端与算法实现类完全解耦。
2024-03-24 09:00:00 277
原创 设计模式 之 抽象工厂模式
设定一个场景:公司要对接两家服务商的业务,业务是相同的,但是两家服务商的接口表现形式是不同的,需要我们对其做一层封装,让它们实现我们统一的接口,以便于公司内部调用。假设业务包括会员和优惠券两个部分,首先我们需要 创建一个ErpService.Abstract项目,并为这两个业务定义两个统一的接口以及一个抽象工厂接口。为A服务商创建一个 ErpService.A的项目,创建两个类实现上面两个接口,并创建一个工厂类实现抽象工厂接口。Console.WriteLine("A服务商创建券方案");
2024-03-24 08:00:00 414
原创 设计模式 之 简单工厂模式+工厂模式
这样我们就用Ioc实现了一个简单工厂,上面的代码示例是将实现类的字典放在工厂中维护,其实可以将字典放到配置文件或者数据库中维护,这样我们再增加新的实现类时,就不需要在修改工厂的代码,实现了实现类的动态扩展。优点:工厂中包含了必要的逻辑判断,根据客户端的选择条件动态的创建相关的类,对于客户端来说,它只需要提供创建实现类的参数,隐藏了创建实例的细节,去除了对具体实现类的依赖。同时每增加一个实现类,也要增加一个工厂类,增加了代码复杂度。创建一个工厂类,对实现了同一个接口的多个类进行实例的创建。
2024-03-23 08:00:00 506
原创 设计模式:面向对象设计的六大原则
很久没有写博客了,一直给自己找借口说太忙了,过几天有空再写,几天之后又几天,时间就这么快速的消逝。说到底就是自己太懒了,不下点决心真是不行。我决定逼自己一把,从今天开始学习设计模式系列,并写成博文记录下来,做不到的话,就罚自己一个月不玩游戏 (作孽啊。。。。好了,面向对象的六大原则就介绍到这里了。其实,我们不难发现,六大原则虽说是原则,但它们并不是强制性的,更多的是建议。
2024-03-22 11:07:36 1395
原创 WinForm使用Costura.Fody打包编译成可独立运行的桌面程序
5.接着,清理一下,然后重新生成,再看看输出文件夹里,是否减少了dll依赖文件,一个可执行的桌面程序绿色版本就这样弄出来了,无需安装,直接运行,方便分享程序给他人使用。7.再把复制到的一些文件,设置包括到项目中,然后修改属性生成操作为嵌入的资源。最后,确定一下是否会打包编译成可独立运行的桌面程序,打开项目里的目录。如果没有看到FodyWeavers.xml文件,那就自己手动添加。,根据你编译的运行环境选择,把生成的依赖文件复制那文件夹里面。下看看,如下图所示,所有依赖的。都打包在一个exe可执行程序里。
2024-03-22 10:11:26 831
原创 Csharp学习Linq
这里就串联上了我们之前学到的知识,最后为了支持多种数据类型,使用上泛型,最后我们就得到了最终封装的方法.这里继续使用之前文章创建的学生类,首先简单介绍一下linq的使用。这里还可以使用扩展方法和lambda表达式进一步的优化我们的代码。这个就是一个yield return反汇编出来的状态机的代码。大量的重复代码---最好是封装一些,把重复的代码统一封装;下面写几个简单的linq的语句,大概知道一下它的使用.封装一个方法,将判断的逻辑独立到一个小方法中去.看起来跟我们自己实现的Where差不多的样子.
2024-03-22 10:00:59 273
原创 每个.NET开发都应掌握C#泛型的知识点
C#泛型编程是.NET framework 2.0的新特征,它提高了代码安全性和代码重用的问题。C#泛型编程在C#是很重要的特性,建议.NET开发熟练掌握它的基本知识点,本文将介绍它的几个知识点,供大家参考。C# 4.0引入了接口的协变和逆变,使得泛型类型参数可以在接口中进行协变(`out`)或逆变(`in`)。泛型约束允许限制泛型参数的类型,以增加类型安全性和代码约束。泛型类型和方法允许在定义时不指定具体的类型,而是在使用时确定类型。泛型类可以继承其他泛型类或非泛型类,也可以实现泛型或非泛型接口。
2024-03-21 10:54:09 249
原创 C# 继承、多态性、抽象和接口详解:从入门到精通
在 中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类:要从一个类继承,使用 : 符号。在以下示例中, 类(子类)继承了 类(父类)的字段和方法:示例
2024-03-21 09:00:00 1081
原创 C#基于SMTP的邮件发送
创建一个发送邮件的方法,首先创建一个SmtpClient对象、发件人地址对象、收件人地址对象和MailMessage对象,这里在创建SMTP对象的时候需要放入服务器地址作为参数、创建收发件人对象的时候需要输入邮箱地址、姓名和Encoding.UTF8作为参数,最后在创建MailMessage对象的时候需要把from和to作为参数传入,如图2-2所示;这里我们可以看到提示中有服务器地址,我们开启的是SMTP服务,如图1-5所示,SMTP服务器的地址是:smtp.163.com;
2024-03-20 16:24:02 966 1
原创 Prism:打造WPF项目的MVVM之选,简化开发流程、提高可维护性
探索WPF开发新境界,借助Prism MVVM库,实现模块化、可维护的项目。强大的命令系统、松耦合通信、内置导航,让您的开发更高效、更流畅在WPF开发中,一个优秀的MVVM库是Prism。
2024-03-20 15:03:05 1093
原创 WPF新境界:MVVM设计模式解析与实战,构建清晰可维护的用户界面
MVVM(Model-View-ViewModel)是一种用于构建用户界面的软件设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和视图模型(ViewModel)。MVVM的目标是实现界面逻辑与用户界面的分离,提高代码的可维护性和可测试性。set;set;<Grid></Grid></Window>// 其他代码省略...MVVM设计模式通过将应用程序分为模型、视图和视图模型,实现了解耦和分离关注点的目标。
2024-03-20 14:31:56 857
原创 C#多线程精解:优雅终止线程的实用方法与技巧
在C#多线程编程中,合理终止线程是关键挑战。通过标志位或CancellationToken,实现安全、协作式的线程终止,确保在适当时机终止线程而避免资源泄漏。
2024-03-20 10:29:19 1747
原创 探索.NET中的定时器:选择最适合你的应用场景
NET提供多种定时器,如System.Windows.Forms.Timer适用于UI,System.Web.UI.Timer用于Web,System.Diagnostics.Timer用于性能监控,System.Threading.Timer和System.Timers.Timer用于一般定时任务。在.NET 6及以上,还有更直观的System.Threading.PeriodicTimer。选择合适的定时器,提升应用性能和用户体验。今天看到一网友聊.net中的定时器,我也把我知道和大家分享一下。
2024-03-20 10:04:04 653
原创 什么是委托,委托的本质是什么?
跟方法有点类似,有参数,返回值,访问修饰符+delegate --委托--特殊的方法?委托的本质是什么?是方法吗?反编译试试:发现定义的委托-----再CustomDelegate ----有对应的class委托的本质是什么?---Class(类),继承自一个MulticastDelegate的特殊类,自己在定义类的时候,是无法继承的。包含的有构造函数和方法。委托既然是一个类---怎么使用这个类?new ---调用方法/属性");x = 100;");x = 100;
2024-03-19 16:10:34 570
原创 CSharp的lambda表达式匿名类扩展方法
C#是强类型语言(编译时决定类型),object是在编译时确定类型,因为Object没有Id等属性,所以无法通过.去访问其中的变量.本质上来说,其实就是一个方法--匿名方法, 在类里面会生成和lambad 表达式参数和返回值完全匹配的方法.关键字去避开了编译器的检查,会在运行时检查,运行时决定类型.这个出现乱取的问题,导致程序崩溃.注意:扩展object类型.期望:既可以增加新的功能,历史代码不变.直接增加类,在新的类中去完成.有什么方法可以正确的取出想访问的属性,又可以避免访问不存在的属性那?
2024-03-19 15:28:12 739
原创 搞懂.NET应用程序管理员权限:三种简单方法一网打尽
NET应用程序以管理员身份运行的方法包括修改清单文件、项目文件,或在运行时动态请求管理员权限。清单文件和项目文件通过声明UAC请求,而动态请求管理员权限则在程序启动时检查并重新启动。选择适当的方法取决于项目需求和配置。在.NET应用程序中强制以管理员身份运行,可以通过清单文件、项目文件或者在程序运行时动态请求管理员权限。
2024-03-19 09:47:03 702
原创 掌握C#中的GUI多线程技巧:WinForms和WPF实例详解
本指南详细解释了在C#中如何在创建控件的线程以外的线程中访问GUI。基础功能使用`Control.Invoke`(WinForms)或`Dispatcher.Invoke`(WPF),高级功能则利用`SynchronizationContext`实现线程间通信,确保代码清晰可读。在C#中,要在创建控件的线程以外的线程访问控件,可以使用Control.Invoke(WinForms)或Dispatcher.Invoke(WPF)。以下是详细的步骤和示例代码,包括基础功能和高级功能。
2024-03-19 09:35:48 890
原创 JWT(跨域身份验证解决方案)
同时服务器保存的用户信息会生成一个sessionid(相当于用户信息是一个value值, 而sessionid是value值的key)返回给客户端, 客户端将sessionid保存到cookie中,当用户再次访问服务器时,会携带sessionid,服务器会拿着sessionid从服务器获取session数据,然后进行用户信息查询,查询到,就会将查询到的用户信息返回,从而实现状态保持。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。
2024-03-18 16:56:13 1096
原创 C#、ASP、ASP.NET、.NET、ASP.NET CORE区别、ASP.NET Core其概念和特点、ASP.NET Core个人心得体会
总的来说,ASP.NET Core是一种卓越的Web应用程序框架,具备出色的性能、丰富的功能和跨平台支持。ASP.NET Core是.NET平台上的新一代Web应用程序开发框架,它是ASP.NET的升级版本。.NET是微软开发的一个跨平台的应用框架,它提供了统一的编程模型和库,可用于开发各种类型的应用程序。总的来说,ASP.NET Core 具有跨平台、高性能、可扩展性、轻量级、内置安全机制、高度可测试性、多种开发模型、开源等特点,使得开发人员可以更加高效、安全、可靠地开发 Web 应用程序。
2024-03-18 10:13:13 909
原创 深度复制:C# 中 List 与 List 多层嵌套不改变原值的实现方法
以上内容详细介绍了在 C# 中实现不改变原 List 值的多层嵌套复制方法,包括使用 AutoMapper、Json.NET、以及对象序列化的步骤和示例。这些方法提供了灵活而高效的方式,可以根据项目需求选择最适合的深度复制方式。
2024-03-13 11:43:58 701
原创 C# 的一些好用的语法糖介绍
C# 中有很多语法糖(Syntactic sugar),它们是一些语言特性,使得编写代码更加简洁、易读、更具表现力。允许基本数据类型表示为可空的,用于表示可能为 null 的值。允许在字符串中直接插入表达式,更加方便地构建字符串。允许你在不修改原始类的情况下向现有类添加方法。可以在调用方法时指定参数的名称,增加了可读性。确保资源在使用完后被释放,使得代码更加健壮。允许你初始化集合类型,使得代码更加清晰。// 使用 myObj。允许你在编译时动态地访问属性和方法。// 使用 myObj。
2024-03-06 10:58:23 970
原创 C#解析JSON
string jsonText = "{\"name\":\"网站\",\"num\":2,\"sites\":[{\"name\":\"Google\",\"info\":[\"Android\",\"Google搜索\",\"Google翻译\"]},{\"name\":\"Taobao\",\"info\":[\"淘宝\",\"网购\"]}]}";string jsonText = "{\"allname\":{\"name\":\"张三\",\"name_en\":\"zhangsan\"}}";
2024-03-01 14:06:52 3485
Advanced Installer C#程序exe文件打包工具
2024-03-25
自带多平台解析接口短视频去水印图集水印小程序源码下载
2024-03-20
PHP云进销存系统ERP销售库存仓库员工管理系统源码+UI简约大气
2024-03-15
借贷APP系统源码全开源/独立Uni前端+JAVA后端开发 JAVA网站源码
2024-03-15
美女图片整站源码带会员积分 图片类套图类网站源码,CX-UDY主题 WordPress自适应美女图片整站源码带会员积分 图片类套
2024-03-06
网址导航网站源码清爽帝国cms网站导航模板带数据
2024-01-24
windows 服务 安装和卸载
2023-11-09
代码编写规范说明书(c#.net与asp.net)
2023-11-03
winform panel 绘制边框阴影
2023-05-08
Winform开发全套31个UI组件开源共享(TTX.Framework.WindowUI)-经典资源
2022-11-22
在Visual Studio中创建WPS外接程序插件
2022-10-25
Lucene.Net+盘古分词器详细介绍
2022-10-11
C# 向C盘写入文件(解决没有权限,无法写入的问题)
2022-10-09
protocolcheck 前端检查本机注册表文件,如果有打开程序,如果没有下载程序/注册表文件
2022-07-11
一个非常不错的开源Winform下面的Html编辑器。包括的基本功能和Word差不多了,常规的格式功能都有,以及清除MS-Wor
2022-07-06
WinFormCefSharp笔记一(入门篇)
2022-04-21
YxShop商城是国内首款ASP.NET+Mssql2000免费开源的网上商城系统
2022-04-12
A18宝宝起名源码 在线起名 周易在线起名 微信支付宝接口+200万姓名数据+自适应手机,无人值守挣钱 搭建简单
2022-04-11
Winform窗体嵌入Office,打开Excel和Word
2022-03-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人