- 博客(55)
- 收藏
- 关注
原创 C#通过NPOI 读、写Excel数据;合并单元格、简单样式修改;通过读取已有的Excel模板另存为文件
【代码】C#通过NPOI 读、写Excel数据;合并单元格、简单样式修改;通过读取已有的Excel模板另存为文件。
2023-11-28 16:38:12 1038
原创 C#多线程的操作
在软件开发的过程中会很频繁的用到线程(Thread),在线程使用的过程中总是能出现“这样”或者“那样”的问题。线程被定义为程序的执行路径。如果应用程序涉及到复杂的和耗时的操作,设置不同的线程执行路径往往是有益的,让每个线程执行特定的工作。其实Task 是基于 Thread 的,是比较高层级的封装,Task 最终还是需要 Thread 来执行,使用Thread 开启的线程默认使用前台线程,而Task 默认使用后台线程。不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。
2023-11-15 17:07:42 278
原创 C#线程使用
1.异步委托开启线程注意:1.若使用异步委托开启线程,则委托仅允许添加一个方法;2.启用委托开启线程,可以多次启用线程,相当于再次启用另一条线程;/// <summary>/// 定义委托类型/// </summary>public static Action<string, int> Test;/// <summary>/// 启动异步委托线程/// </summary>/// <param name="name"&
2022-02-25 16:16:25 839
原创 C#文本框验证当前按键或验证输入内容
1 核心代码(校验当前字符是否为数字或退格键)public class Utility{ /// <summary> /// 判断按键是否为数字或退格键 /// </summary> /// <param name="ch">按键字符</param> /// <returns>是:true</returns> public static bool IsInputNumber(char ch) { return
2022-02-21 15:26:50 1836
原创 C#关于Func和Action委托的介绍
委托:委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。1.Action委托没有返回值,可以不包含参数(1)声明委托、定位委托事件、向委托添加事件、执行委托/// <summary>/// 不包含参数/// </summary>private event Action Action_0;/// <
2022-02-16 11:59:06 4821
原创 C#关于JSON的使用
Json和实体对象的转换注意:(1)一般情况不使用加密,若要使用加密请进行验证以免出现错误;(2)大量数据时尽量少用Json存储数据,Json适用于轻量级数据;(3)使用Json时需要添加依赖包,并引进命名空间;1.安装依赖包从包管理器添加Json依赖包,2.引用Json的DLL文件3.Json实用工具类 /// <summary> /// JSON和类的序列化、反序列化 /// </summary> public class Json
2022-02-16 10:45:51 4185 1
原创 关于C#winform端Settings.settings的见解
1.说明由于最近工作比较忙很长时间没有写文章了,最近在项目中使用Settings.settings时遇见了一些问题,故作记录,要是有不对的希望各位大神指点。2.Settings.settings说明Settings.settings结构如上图,在Settings.settings中添加节点时Settings.Designer.cs自动生成该节点的属性,App.config自动生成节点信息。3.使用方式介绍private void button1_Click(object sender, E
2021-12-09 12:06:56 2893
原创 C#TextBox设置提示文本(SetHintText)
效果展示核心代码[DllImport("user32.dll", CharSet = CharSet.Auto)]private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);public static void SetHintText(Control control, string text){ Sen
2021-10-20 10:38:54 4291
原创 C#已知两点(线段),求互相垂直平分两点(线段)。
/// <summary> /// 根据两点求直线以及直线垂直平分线的k,b值, /// </summary> /// <param name="x1">传递值为已知坐标点x1,返回值为垂直平分线的x1</param> /// <param name="x2">传递值为已知坐标点x2,返回值为垂直平分线的x2</param> /// <param na
2021-09-11 11:39:51 1056
原创 C#在控件中绘制矩形、圆、线段等(切换不同的图片,自定义翻页控件,通过委托监控某个字段)
1.效果展示代码 /// <summary> /// 记录鼠标移动时的位置 /// </summary> private Point _mouseLocation; //鼠标移动事件 private void pic_1_MouseMove(object sender, MouseEventArgs e) { _mouseLocation =
2021-09-09 18:23:35 2090 1
原创 C#winform设置组合快捷键
1.设置窗体属性:keyPreview = true;2注册事件3.在事件中添加代码 private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.Alt && e.KeyCode == Keys.S) //Ctrl + Alt + S { MessageBox.Show("按下了Control + Alt + S");
2021-08-13 11:32:15 900
原创 C#环形轴运动控制,使用就近原则
说明:处理环形轴(范围:0° — 360°,向较大值为正转,向较小值为反转)运动控制时,发现 1° => 359° 运动,进行正转;359° => 1°运动,进行了反转。我们希望环形轴运动时应使用就近原则,故作以下处理。处理方案//控制环形轴运动方向,使用就近原则if (axis == 环形轴)//axis 轴号{ posInMm %= 360;//posInMm 目标位置 double dCurrentPos = GetMotorPositionInMm(axis);
2021-06-11 11:46:50 426
原创 C#winform程序防多开,以及限定指定PC打开程序
1.限制只能打开一个程序var processes = Process.GetProcesses();var currentProcess = Process.GetCurrentProcess();var isRun = false;foreach (var p in processes){ if (p.ProcessName == currentProcess.ProcessName && p.Id != currentProcess.Id) {
2021-06-10 11:21:42 373
原创 C#重绘GroupBox,使文本居中显示
using System.ComponentModel;using System.Drawing;using System.Windows.Forms;namespace MyNameSpace{ public class M_GroupBox : GroupBox { private string _text = ""; /// <summary> /// 构造函数 /// </summary&
2021-05-08 16:31:26 1187
原创 C#条件拼接Expression<Func<T, bool>>
使用代码特别注意拼接条件时,所使用到的条件strID,strBir必须是独立的var predicate = PredicateBuilder.GetTrue<Student>();predicate = predicate.And(it => it.id.ToString().Contains(strID));predicate = predicate.And(it => it.Birthday.ToString().Contains(strBir));predicat
2021-04-22 16:58:52 4518
原创 C#winform跨窗体更新UI,跨线程更新UI
1. 跨线程界面更新1.1通过委托更新界面public delegate void RefreshInterface(int num);//创建委托,含有一个参数numbool MyThreadIsRun = false;//用来控制线程状态private Thread MyThread = null; //创建线程private void button1_Click(object sender, EventArgs e){ MyThreadIsRun = !MyThreadIsRun
2021-04-21 13:46:59 8535
原创 C#对文件及文件目录操作
获取指定目录下文件SearchOption.TopDirectoryOnly //当前目录SearchOption.AllDirectories //当前目录的所有子目录/// <summary>/// 获取当前目录中指定类型所有文件信息/// </summary>/// <param name="directory">当前目录</param>/// <param name="extension">扩展名数组</param>
2021-04-21 13:34:32 1204
原创 C#树节点常用操作
1 鼠标点击节点复选框判断1.1 复选框鼠标点击判断private void tvw_MouseDown(object sender, MouseEventArgs e){ TreeViewHitTestInfo info = tvw.HitTest(e.Location); if (info != null && info.Location == TreeViewHitTestLocations.StateImage) { System.Console.WriteLine("
2021-04-21 13:15:08 1355
原创 常用SQL
重复数据提取一条//id为主键,已age分组,获取最小的id的值,通过子查询提取重复数据中一条数据SELECT * FROM [TestTable].[dbo].[Student] WHEREid IN ( select min(id) from [TestTable].[dbo].[Student] group by Age )...
2021-04-20 15:57:46 86
原创 C#DataTable操作技巧
DataTable dt = new DataTable(); dt=GetData();//dt获取数据后,列名依次为:姓名,班级,成绩 //根据需求添加序号列 dt.Columns.Add("序号").SetOrdinal(0);//dt的结构为:序号,姓名,班级,成绩
2021-04-20 08:50:42 8639
原创 SqlConnection类连接数据库,附加简单查询
private void Connect(){ SqlConnection conn; SqlCommand cmd; SqlDataReader dr = null; //服务器名称 \ 数据库实例名 (本机数据库可以用 "." 或"127.0.0.1" 代替) string connectionString1 = "Data Source=.;"; //数据库名称 connectionString1 += "Initial Catalog = TestTab
2021-04-15 14:08:12 556
原创 C#JSON的序列化和反序列化
实体类模型public class JsonTest{ public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Msg { get; set; }}开始序列化和反序列化var json = new JsonTest(){ ID = 123, Name = "张三", Age = 25,
2021-04-14 14:30:44 99
原创 SqlSugar操作笔记
//第一种var t1 = db.Updateable<VenueInformation>() .SetColumns(it => new VenueInformation() { IsOpenState = false }) .Where(it => it.Name == "羽毛球场地一" || it.Name == "羽毛球场地三"|| it.Name == "乒乓球场地一") .ExecuteCommand();//第二种var t2 = db.
2021-04-08 17:41:19 2397
原创 C#生成随机汉字(以及解决.net Core项目gb2312编码报错问题)
private string GenerateChineseWords(){ //.net core使用时需注册下行代码,并向项目导入System.Text.Encoding.CodePages包 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Encoding gb = Encoding.GetEncoding("GB2312"); Random ran = new Random();
2021-04-07 14:32:12 392
原创 C#dictionary根据索引值获取Key值
根据dictionary索引获取Key和Value值var key = dictionary.ElementAt("索引值").Key;var value= dic.ElementAt("索引值").Value;获取一个序列的随机开始时间,并设置对应的结束时间Dictionary<string, string> dic = new Dictionary<string, string>();dic.Add("06:00", "07:30");dic.Add("08:00"
2021-04-06 16:43:17 11160
原创 java保留有效数字
/** * 设置数据精度 * <p>一位数保留2位小数</p> * <p>两位数保留1位小数</p> * <p>三位数保留整数</p> * * @param value 需要处理的double类型数据 * @return 处理完成的数据 */private double setDataAccuracy(double value) { try { BigDecimal bigDecimal;
2021-01-07 14:11:52 1809
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人