自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 Winform(12.控件讲解)

private void 新建MDI子窗体ToolStripMenuItem_Click(object sender, EventArgs e)private void 设置字体ToolStripMenuItem_Click(object sender, EventArgs e)private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e)//让当前窗体当cf的父窗体,父组件把IsMidParent属性改为True。

2025-05-06 17:38:52 1281

原创 Winform(11.案例讲解1)

/如果右侧不存在该内容,则添加上去。//如果右侧不存在该内容,则添加上去。//获取到当前item上的内容。//获取到当前item上的内容。//遍历出来左侧可以被选到的item。今天写两个案例,用于更好的理解控件的使用。namespace _1.案例讲解。namespace _1.案例讲解。

2025-05-05 11:11:21 1637

原创 Winform(10.常用控件3)

new Student { Name = "大二", Score = 60, Gender = "男" },new Student { Name = "大四", Score = 50, Gender = "男" },new Student { Name = "大七", Score = 50, Gender = "男" },// 根据复选框筛选 60 分以上的学生。// 将筛选后的学生名字添加到列表框。// 根据单选按钮筛选性别。menustrip:菜单栏,用来做菜单分类。// 更新列表框内容。

2025-05-04 13:11:56 1248

原创 Winform(9.常用控件2)

/SelectdItem:选择的项。//给listBox添加数据。//选择到某一项的时候会触发。menustrip:菜单栏,用来做菜单分类。radionButton:单选按钮。dateTimePicker:日历。namespace _1.常用控件。colorDialog:颜色面板。fontDialog:字体面板。pictureBox:图像框。Panel:面板,对控件分组。linkLabel:超链接。comboBox:下拉框。listBox:选项列表。

2025-05-03 14:51:38 876

原创 Winform(8.常用控件1)

private void 迪丽热巴ToolStripMenuItem_Click(object sender, EventArgs e)label1.Font = new Font("宋体",16);else if (changeColor =="绿色")if (changeColor =="红色")//把当前页面作为子页面的父窗体。menustrip:菜单栏,用来做菜单分类。dateTimePicker:日历。colorDialog:颜色面板。fontDialog:字体面板。

2025-05-02 12:26:20 719

原创 Winform(7.序列化方式整理)

二进制序列化:借助BinaryFormatter类达成,它能把对象转换为二进制流,同时也能将二进制流还原成对象。在 C# 里,能够运用System.Xml.Serialization命名空间里的XmlSerializer类来实现 XML 序列化与反序列化。//取出来json字符串。反序列化对象:利用BinaryFormatter类的Deserialize方法从文件读取二进制数据,再把它转换回对象。Console.WriteLine("----------反序列化-----******------");

2025-05-01 15:38:55 610

原创 Winform(6.序列化方式)

Console.WriteLine("----------反序列化-----******------");this.label1.Text = $"此人名叫:{p1.Name},今年:{p1.Age}";this.label1.Text = $"此人名叫:{p1.Name},今年:{p1.Age}";this.label1.Text = $"此人名叫:{p1.Name},今年:{p1.Age}";this.label1.Text = $"此人名叫:{p1.Name},今年:{p1.Age}";

2025-04-30 11:43:47 834

原创 Winform(5.登录注册(序列化))

MessageBox.Show("用户名或密码不能为空");MessageBox.Show("用户名或密码不能为空");MessageBox.Show("用户已存在!MessageBox.Show("用户名或密码错误");//json:简便的跨平台存储文件格式,方便读写(把对象存入到本地)MessageBox.Show("登录成功");MessageBox.Show("注册成功!// //反序列化的时候会直接对属性赋值。////反序列化接口的方法,用于获取对象的数据。//文件存在,需要追加。

2025-04-29 09:10:35 1169

原创 Winform(4.登录注册)

MessageBox.Show("用户名已存在!MessageBox.Show("用户名或密码不能为空");MessageBox.Show("用户名或密码不能为空");MessageBox.Show("登录成功");MessageBox.Show("用户文件不存在");MessageBox.Show("注册成功!MessageBox.Show("账号或密码错误");namespace _1.登录注册。namespace _1.登录注册。namespace _1.登录注册。

2025-04-28 09:07:59 773

原创 Winform(3.线程池)

Task.Factory.StartNew(() => { Console.WriteLine("工厂模式的异步操作");Task task2 = new Task(() => { Console.WriteLine("任务5");Console.WriteLine($"线程{i + 1}开始及工作了,{s}");Task.Run(() => { Console.WriteLine("任务2");Task.Run(() => { Console.WriteLine("任务3");

2025-04-27 09:04:48 945

原创 Winform(2.多线程)

Console.WriteLine($"{Thread.CurrentThread.Name},恢复了,go!Console.WriteLine($"for循环操作恢复了,循环了:{i + 1}次");Console.WriteLine("我是:{0},我要终止了.", thread.Name);Console.WriteLine($"for循环操作,循环了:{i+1}次");Console.WriteLine("用来进行线程测试");MessageBox.Show("线程终止失败了");

2025-04-26 19:23:55 870

原创 Winform(1.Winform控件学习)

MessageBox.Show("这是一个带有默认按钮的对话框","我是标题",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2);DialogResult result = MessageBox.Show("这是一个带有按钮和图标的对话框","早上好",MessageBoxButtons.YesNo,MessageBoxIcon.Question);MessageBox.Show("欢迎");

2025-04-25 19:53:53 1170

原创 C# 零基础入门篇(19.DateTime 使用指南)

Console.WriteLine("当前日期和时间:" + now.ToString("yyyy-MM-dd HH:mm:ss"));Console.WriteLine("格式化日期:" + now.ToString("yyyy年MM月dd日 HH时mm分ss秒"));Console.WriteLine("明天的日期:" + tomorrow.ToString("yyyy-MM-dd"));

2025-03-18 09:03:28 989

原创 C#零基础入门篇(18. 文件操作指南)

在C#中,文件操作主要通过`System.IO`命名空间中的类来实现,例如`File`、`FileStream`、`FileInfo`等。File.AppendAllText("example.txt", "追加的文本内容\n", Encoding.UTF8);2. **使用`File.ReadAllLines`方法读取文件内容为字符串数组**1. **使用`File.ReadAllText`方法读取文件内容为字符串**1. **使用`File.Exists`方法判断文件是否存在**

2025-03-17 09:07:34 1451 1

原创 C# 零基础入门篇(17.堆(Heap)与栈(Stack)的区别)

**性能** | 分配和释放速度快 | 分配和释放速度慢 || **内存分配** | 自动分配和释放 | 手动分配和释放(垃圾回收) |- **堆**:适用于存储引用类型实例和装箱后的值类型,生命周期长,分配和释放速度慢,但大小较大。| **存储内容** | 局部变量、方法调用上下文 | 引用类型实例、装箱后的值类型 |- **内存分配**:堆内存由垃圾回收器(GC)管理,需要手动分配和释放(通过垃圾回收)。

2025-03-15 09:01:29 739

原创 C#零基础入门篇( 16.装箱(Boxing)与拆箱(Unboxing))

装箱是指将值类型(如 `int`、`double`、`struct` 等)转换为引用类型(如 `object` 或 `System.ValueType`)。拆箱是指将引用类型(如 `object`)转换回值类型(如 `int`)。- **优化建议**:优先使用泛型集合(如 `List<T>`),避免不必要的类型转换,减少装箱和拆箱操作。- 当需要将值类型作为引用类型传递时(例如,将 `int` 转换为 `object`)。- **装箱**:将值类型转换为引用类型,会增加内存分配和垃圾回收的开销。

2025-03-14 08:58:17 666

原创 C#零基础入门篇(15. Array、ArrayList 和 List 的比较)

**类型安全** | 类型安全 | 非类型安全 | 类型安全 || **性能** | 固定大小,高性能 | 动态大小,性能较低 | 动态大小,高性能 || **使用场景** | 固定大小集合 | 动态集合(已过时) | 动态集合(推荐) || **添加元素** | 不支持动态添加 | 动态添加,性能较低 | 动态添加,性能较高 || **删除元素** | 不支持动态删除 | 动态删除,性能较低 | 动态删除,性能较高 |

2025-03-13 09:39:41 578

原创 # C零基础入门篇(14.Dictionary 使用指南)

如果字典的键是自定义类型,需要重写 `Equals()` 和 `GetHashCode()` 方法。// 返回 "Apple"`TryGetValue()` 方法可以安全地访问值,避免因键不存在而抛出异常。- 使用 `TryGetValue()` 方法可以避免因键不存在而抛出异常。使用 `ContainsValue()` 方法检查值是否存在。使用 `ContainsKey()` 方法检查键是否存在。使用 `Remove()` 方法根据键删除键值对。如果键已存在,`Add()` 方法会抛出异常。

2025-03-12 14:46:19 697

原创 C#零基础入门篇(13.List<T>的基本特性)

**泛型集合**:`List<T>` 是一个泛型类,使用类型参数 `T` 来指定存储的元素类型。- **删除元素**:删除元素的时间复杂度取决于操作的位置,删除末尾元素为 O(1),删除中间或开头元素为 O(n)。- **动态扩展**:`List<T>` 的容量会根据需要自动扩展,但每次扩展可能会带来一定的性能开销。- **`FindAll(Predicate<T> match)`**:查找所有匹配的元素。- **`Find(Predicate<T> match)`**:查找第一个匹配的元素。

2025-03-11 08:58:28 671

原创 C#零基础入门篇(12.Lambda表达式的基础语法)

/ Action委托。// 带一个参数的Lambda表达式。// 输出 Hello, Lambda!- **表达式或代码块**:可以是一个简单的表达式,也可以是一个包含多条语句的代码块。- **参数列表**:可以为空(如`()`),也可以包含一个或多个参数。- **箭头符号**:`=>`,表示参数和表达式之间的映射。### 1. **Lambda表达式的基础语法**

2025-03-10 10:43:58 530

原创 C#零基础入门篇(11.泛型的基本概念)

**where T : IComparable**:限制类型参数必须实现`IComparable`接口。这里的`T`是一个类型参数,可以在实例化`List`时指定为`int`、`string`或其他任何类型。- **where T : BaseClass**:限制类型参数必须继承自`BaseClass`。在定义泛型时,类型参数用尖括号`<>`表示。- **泛型委托**:如`Func`和`Action`,广泛用于事件处理和回调。- **where T : class**:限制类型参数必须是引用类型。

2025-03-08 09:27:39 647

原创 # C零基础入门篇(10.结构体(Struct)详细说明)

1. **值类型**:结构体是值类型,存储在栈内存中。// 输出:(10, 20)3. **默认构造函数**:结构体不能显式定义无参构造函数,但会自动提供一个无参构造函数,将所有字段初始化为默认值。| 继承 | 不能继承其他结构体,但可以实现接口 | 可以继承其他类,也可以实现接口 |4. **性能优势**:由于结构体是值类型,对于小数据结构,使用结构体可以减少内存分配和垃圾回收的开销。- **属性**:提供对字段的封装,允许对字段进行读写操作,同时可以在设置值时进行验证。

2025-03-07 11:34:33 569

原创 # C零基础入门篇(9. `const` 与 `readonly` 的区别)

**性能** | 稍微优于`readonly`(因为直接嵌入) | 略微逊于`const`,但差异通常可以忽略 |- **编译时常量**:`const`字段的值必须在编译时已知,通常用于定义固定不变的值,如数学常量、状态码等。- **运行时初始化**:`readonly`字段的值可以在构造函数中动态初始化,适合依赖于运行时计算的只读值。- **灵活性**:与`const`相比,`readonly`字段的值可以在运行时确定,更灵活。

2025-03-06 09:11:54 713

原创 # C零基础入门篇 (8.密封类详解)

在某些情况下,密封类可以带来性能优化。在上述代码中,`DerivedClass`中的`Display`方法被标记为`sealed`,因此不能再被派生类重写。- **虚方法**:密封类可以包含虚方法,但由于不能被继承,这些虚方法无法在派生类中被重写。- **成员特性**:密封类可以包含字段、属性、方法等成员,但这些成员不能被派生类重写。- **不可继承**:密封类不能被继承,任何尝试继承密封类的操作都会导致编译错误。在上述代码中,`SealedClass`被声明为密封类,因此无法被其他类继承。

2025-03-05 09:05:50 459

原创 C# 零基础入门篇(7.抽象类)

**构造函数和析构函数**:抽象类可以有构造函数和析构函数,但它们不会被直接调用。- **普通方法和属性**:抽象类也可以包含具体的实现,这些成员可以被派生类继承。派生类必须实现抽象类中所有的抽象方法和抽象属性,否则派生类也必须被声明为抽象类。抽象方法是没有具体实现的方法,必须在派生类中被实现。- **隐藏实现细节**:通过抽象类隐藏具体的实现细节,只暴露必要的接口。- **抽象方法**:没有具体实现的方法,派生类必须实现这些方法。- **抽象属性**:没有具体实现的属性,派生类必须实现这些属性。

2025-03-04 10:13:41 651

原创 C# 零基础入门篇(6.类的详细讲解)

**访问修饰符**:如`public`、`private`、`internal`等,用于控制类的访问权限。public static int Add(int a, int b) // 静态方法。public int Multiply(int a, int b) // 实例方法。类的成员是类的组成部分,包括字段、方法、属性、构造函数、析构函数、事件等。方法可以是静态的或实例的。- **实例成员**:属于类的对象实例,需要通过对象访问。- **静态方法**:通过类直接调用,不依赖于类的实例。

2025-03-03 10:52:00 770

原创 C#基础入门篇 (5.数组详解)

`Array.Clear(array, index, length)` | 重置元素为默认值 || `Array.ForEach(array, action)` | 对每个元素执行操作 || `Array.FindAll(array, predicate)` | 返回所有匹配元素的数组 || `Array.Find(array, predicate)` | 查找满足条件的第一个元素 |int[][] jagged = new int[3][];

2025-02-28 21:44:18 400

原创 C#零基础入门篇(4.C# 中的字符串(`string`)详解)

字符串是由字符组成的不可变序列,每个字符在字符串中都有一个位置索引。字符串是`System.String`类的实例。- **索引**:字符串中的字符从索引`0`开始计数。例如,`"Hello"`中,`'H'`的索引为`0`,`'e'`的索引为`1`,依此类推。// 创建了一个新的字符串 "Hello World"// 创建一个包含5个'a'的字符串:"aaaaa"每次对字符串进行修改操作时,都会生成一个新的字符串实例。字符串是不可变的,这意味着每次对字符串进行修改操作时,都会创建一个新的字符串实例。

2025-02-28 07:00:00 429

原创 C#零基础入门篇(3.C# 中的函数(方法)详解)

在C#中,函数通常被称为**方法**(Method)。方法是一组执行特定任务的语句,通常用于封装代码逻辑,以便重复使用和提高代码的可读性。方法可以有参数,也可以有返回值。方法名应具有描述性,清晰地表明方法的功能。值参数是方法调用时传递的参数的副本。方法内部对参数的修改不会影响原始变量。调用方法时,需要指定方法名和所需的参数(如果有)。方法的定义包括方法名、参数列表和方法体。如果方法不需要返回值,可以使用`void`作为返回类型。方法可以返回一个单一值,返回值类型在方法定义时指定。

2025-02-27 19:24:20 727

原创 C# 零基础入门篇(2. `while` 和 `for` 循环的详细对比)

在某些特定情况下,`for` 循环可能会稍微快一些,因为它的初始化、条件判断和迭代部分都在循环头部集中处理,编译器可能会对其进行更好的优化。- **不确定循环次数**:当你不知道循环需要执行多少次时,`while` 循环是一个很好的选择。`while` 循环是一种条件循环,只要指定的条件为 `true`,循环就会一直执行。- **条件驱动**:当循环的执行依赖于某个条件的变化时,`while` 循环非常适用。- **计数驱动**:当循环的执行依赖于一个计数器的变化时,`for` 循环非常适用。

2025-02-25 16:51:41 641

原创 C# 零基础入门篇(1.基本数据类型详解)

无符号字节 | `byte` | 1 字节 | 0 到 255 | 0 | `byte b = 200;| 布尔值 | `bool` | 1 字节 | `true` 或 `false` | false | `bool flag = true;| 典型类型 | `int`, `double`, `bool`, `char` | `string`, `object`, 数组 |

2025-02-21 20:01:54 692 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除