技术周总结 09.09~09.15周日(C# WinForm WPF)
文章目录
- 一、09.09 周一
- 1.1) 问题01: Windows桌面开发中,WPF和WinForm的区别和联系?
- 联系:
- 区别:
- 二、09.12 周四
- 2.1)问题01:visual studio的相关快捷键有哪些?
- 通用快捷键
- 编辑
- 导航
- 调试
- 窗口管理
- 2.2)问题02: public partial class ChoosePLReason : CommonBaseForm
- 2.3)问题03:介绍Windows Forms中的 System.Windows.Forms.DataGridViewRowCollection
- 常用属性:
- 常用方法:
- 示例代码
- 2.4) 问题04: 介绍下 C#中的 `DataGridView` 控件
- 主要特性
- 基本用法
- 注意事项
- 2.5)问题05:Windows 窗体应用程序 中有哪些常见的概念,类和控件等
- 常见概念
- 常见类
- 常见控件
- 事件
- 布局控件
- 2.6) 问题06:WPF 中有哪些常见的概念,类和控件等
- 常见概念
- 常见类
- 常见控件
- 数据绑定相关类
- 资源和样式相关类
- 三、09.13 周五
- 3.1)问题01: git怎么查询本地有哪些 commit没有 push到远端?
- 四、09.14 周六
- 4.1)问题01:C#代码中的 dll文件
- 创建DLL文件
- 使用DLL文件
- 示例
- 4.2) 问题02: C#中的注解(特性)
- 4.3) 问题03:AssemblyInfo.cs文件 [assembly: AssemblyTitle("MyCode.Entity")]
- 4.4)问题04:C#中 using 块语句
- 4.5)问题05:WinForm中的 Form类的使用
- 1. 创建一个基本的Form
- 2. 添加控件
- 3. 处理事件
- 4. 显示和关闭窗口
- 5. 设置窗口属性
- 总结
一、09.09 周一
1.1) 问题01: Windows桌面开发中,WPF和WinForm的区别和联系?
WPF (Windows Presentation Foundation) 和 WinForms (Windows Forms) 都是用于开发Windows桌面应用程序的技术栈,但是它们之间存在一些重要的区别和联系:
联系:
- 目标平台:两者都是.NET框架的一部分,旨在为开发者提供创建图形用户界面(GUI)的方式。
- 编程语言:都可以使用C#或者VB.NET等.NET支持的语言进行开发。
- IDE支持:Visual Studio提供了对这两种技术的集成设计支持。
区别:
- 显示技术:WPF使用矢量图形和DirectX进行渲染,而WinForms则依赖于GDI+(Graphics Device Interface Plus)。这意味着WPF可以提供更高质量的图像,并且更容易处理复杂的视觉效果。
- XAML:WPF引入了XAML(可扩展应用程序标记语言),这是一种XML衍生的语言,用来定义和链接用户界面及其组件。WinForms使用的是基于二进制的形式来保存窗体布局。
- 数据绑定:虽然两者都支持数据绑定,但是WPF的数据绑定机制更为强大,支持双向绑定,以及更复杂的绑定表达式。
- 动画与媒体:WPF内置了对动画、音频和视频的强大支持,而这些在WinForms中需要额外的工作才能实现。
- 灵活性:WPF允许开发者创建高度定制化的控件,提供了更灵活的布局模型,而WinForms在这方面相对较为传统和固定。
- 多平台支持:WPF最初仅限于Windows平台,但随着.NET Core和.NET 5及更高版本的发展,WPF也获得了跨平台的能力。WinForms同样受益于.NET Core的跨平台特性,但其主要设计目标仍然是Windows操作系统。
总的来说,WPF是一个更为现代的选择,尤其是在需要复杂UI设计的应用程序中。WinForms则因其简单易用,在构建基本的业务应用程序方面仍然非常受欢迎。选择哪一个取决于具体项目的需求和个人偏好。
二、09.12 周四
2.1)问题01:visual studio的相关快捷键有哪些?
Visual Studio 是一个功能强大的集成开发环境 (IDE),提供了许多快捷键来提高开发效率。以下是一些常用的快捷键:
通用快捷键
- Ctrl + Shift + N: 新建项目
- Ctrl + O: 打开文件
- Ctrl + S: 保存文件
- Ctrl + Shift + S: 全部保存
- Ctrl + P: 打印
- Ctrl + Z: 撤销
- Ctrl + Y: 重做
- Ctrl + X: 剪切
- Ctrl + C: 复制
- Ctrl + V: 粘贴
- Ctrl + A: 全选
- Ctrl + F: 查找
- Ctrl + H: 替换
- Ctrl + Shift + F: 全局查找
- Ctrl + Shift + H: 全局替换
编辑
- Ctrl + K, Ctrl + C: 注释选中代码
- Ctrl + K, Ctrl + U: 取消注释选中代码
- Ctrl + K, Ctrl + D: 格式化文档
- Ctrl + K, Ctrl + F: 格式化选中代码
- Ctrl + Space: 触发 IntelliSense
- Ctrl + .: 快速修复(显示快速操作)
导航
- Ctrl + T: 转到所有(文件、类型、成员等)
- Ctrl + ,: 快速查找文件
- F12: 转到定义
- Alt + F12: 查看定义
- Ctrl + -: 向后导航
- Ctrl + Shift + -: 向前导航
调试
- F5: 启动调试
- Shift + F5: 停止调试
- F9: 切换断点
- F10: 逐过程
- F11: 逐语句
- Shift + F11: 退出当前函数
窗口管理
- Ctrl + Alt + L: 打开解决方案资源管理器
- Ctrl + Alt + O: 打开输出窗口
- Ctrl + , Ctrl + M: 打开错误列表
- Ctrl + Alt + X: 打开工具箱
这些快捷键可以帮助你更高效地使用 Visual Studio。你可以在 Visual Studio 中自定义快捷键,以适应你的工作习惯。
2.2)问题02: public partial class ChoosePLReason : CommonBaseForm
在C#中,partial关键字允许将一个类、结构或接口的定义分割成多个文件。每个文件都包含该类、结构或接口的一部分定义,最终在编译时所有部分会被组合成一个完整的定义。这在大型项目中非常有用,因为它允许多个开发人员同时编辑同一个类而不会产生冲突。
下面是一个关于partial类的简单示例:
文件1:ChoosePLReason_Part1.cs
public partial class ChoosePLReason : CommonBaseForm
{public void Method1(){Console.WriteLine("Method1 in Part1");}
}
文件2:ChoosePLReason_Part2.cs
public partial class ChoosePLReason : CommonBaseForm
{public void Method2(){Console.WriteLine("Method2 in Part2");}
}
在编译时,这两个文件会被组合成一个完整的ChoosePLReason类,包含Method1和Method2方法。
你可以在任何一个部分中定义构造函数、属性、方法等,并且这些部分共享同一个类的成员。
需要注意的是:
- 所有部分必须使用
partial关键字。 - 所有部分必须在同一个命名空间中。
- 所有部分组合起来必须形成一个有效的类定义。
2.3)问题03:介绍Windows Forms中的 System.Windows.Forms.DataGridViewRowCollection
System.Windows.Forms.DataGridViewRowCollection 是 Windows Forms 中 DataGridView 控件的一部分,用于表示 DataGridView 控件中的所有行的集合。DataGridView 是一个非常强大的控件,可以用来显示和管理数据表格。
以下是一些常用的 DataGridViewRowCollection 方法和属性:
常用属性:
Count: 获取集合中实际包含的元素数。Item[Int32 index]: 获取或设置指定索引处的行。
常用方法:
Add(): 添加一行到DataGridView。Add(Object[] values): 使用指定的值添加一行到DataGridView。Clear(): 从集合中删除所有行。Contains(DataGridViewRow dataGridViewRow): 确定指定的行是否在集合中。Remove(DataGridViewRow dataGridViewRow): 从集合中移除指定的行。RemoveAt(Int32 index): 移除指定索引处的行。
示例代码
以下是一个简单的示例,展示如何使用 DataGridViewRowCollection 在 DataGridView 中添加和移除行:
using System;
using System.Windows.Forms;public class DataGridViewExample : Form
{private DataGridView dataGridView;public DataGridViewExample(){dataGridView = new DataGridView{Dock = DockStyle.Fill,ColumnCount = 3};// 添加列标题dataGridView.Columns[0].Name = "ID";dataGridView.Columns[1].Name = "Name";dataGridView.Columns[2].Name = "Age";// 添加行string[] row1 = new string[] { "1", "John Doe", "30" };string[] row2 = new string[] { "2", "Jane Smith", "40" };dataGridView.Rows.Add(row1);dataGridView.Rows.Add(row2);// 移除第一行dataGridView.Rows.RemoveAt(0);Controls.Add(dataGridView);}[STAThread]static void Main(){Application.EnableVisualStyles();Application.Run(new DataGridViewExample());}
}
这个示例创建了一个包含三列的 DataGridView,然后添加了两行数据,并移除了第一行。DataGridView 控件被添加到窗体中并显示。
2.4) 问题04: 介绍下 C#中的 DataGridView 控件
DataGridView 是 C# 中用于显示和编辑表格数据的控件,通常用于 Windows 窗体应用程序中。它功能强大且灵活,能够处理大量数据,并提供多种自定义和扩展选项。以下是 DataGridView 控件的一些主要特性和使用方法:
主要特性
- 数据绑定:
DataGridView可以绑定到多种数据源,如DataTable、BindingSource、List<T>等。 - 列类型:支持多种列类型,包括文本框列(
DataGridViewTextBoxColumn)、复选框列(DataGridViewCheckBoxColumn)、按钮列(DataGridViewButtonColumn)等。 - 排序和过滤:支持对数据进行排序和过滤,用户可以通过点击列头来排序数据。
- 自定义外观:可以自定义单元格、行、列和整个控件的外观,包括颜色、字体和边框样式等。
- 事件处理:提供了丰富的事件,如
CellClick、CellValueChanged、RowEnter等,以便处理用户交互。 - 编辑和验证:支持单元格和行的编辑,并提供了数据验证功能。
基本用法
以下是一个简单的示例,展示了如何在 Windows 窗体应用程序中使用 DataGridView 控件:
using System;
using System.Data;
using System.Windows.Forms;public class DataGridViewExample : Form
{private DataGridView dataGridView;public DataGridViewExample(){InitializeComponent();}private void InitializeComponent(){this.dataGridView = new DataGridView();this.SuspendLayout();// 设置 DataGridView 属性this.dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;this.dataGridView.Location = new System.Drawing.Point(13, 13);this.dataGridView.Name = "dataGridView";this.dataGridView.Size = new System.Drawing.Size(600, 400);this.dataGridView.TabIndex = 0;// 添加 DataGridView 到窗体this.Controls.Add(this.dataGridView);// 窗体属性this.ClientSize = new System.Drawing.Size(800, 450);this.Name = "DataGridViewExample";this.Text = "DataGridView 示例";this.Load += new System.EventHandler(this.DataGridViewExample_Load);this.ResumeLayout(false);}private void DataGridViewExample_Load(object sender, EventArgs e){// 创建 DataTable 并添加数据DataTable table = new DataTable();table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));table.Rows.Add(1, "Alice", 30);table.Rows.Add(2, "Bob", 25);table.Rows.Add(3, "Charlie", 35);// 将 DataTable 绑定到 DataGridViewthis.dataGridView.DataSource = table;}[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new DataGridViewExample());}
}
注意事项
- 性能:对于大量数据,可以考虑使用虚拟模式(
VirtualMode)来提高性能。 - 数据验证:在处理用户输入时,确保进行适当的数据验证,以防止无效数据的输入。
- 自定义:可以通过继承
DataGridView或其列类型,来实现更复杂的自定义行为和外观。
DataGridView 是一个非常强大的控件,通过合理使用其各种特性,可以满足大多数表格数据展示和编辑的需求。
2.5)问题05:Windows 窗体应用程序 中有哪些常见的概念,类和控件等
在Windows窗体应用程序(Windows Forms Application)中,有许多常见的概念、类和控件。以下是一些关键的部分:
常见概念
-
事件驱动编程:Windows Forms 应用程序主要基于事件驱动的编程模型,用户的操作(如点击按钮、输入文本等)会触发事件,应用程序会对这些事件作出响应。
-
控件(Control):控件是构成用户界面的基本元素,如按钮、文本框等。
-
窗体(Form):窗体是应用程序的基本容器,可以包含各种控件。
常见类
-
Form:表示一个窗体,是所有窗体类的基类。
-
Application:提供方法来启动和停止应用程序、处理消息循环等。
-
Control:所有控件的基类,提供了所有控件的基本属性和方法。
-
Button:表示一个按钮控件。
-
TextBox:表示一个文本框控件,允许用户输入文本。
-
Label:表示一个标签控件,用于显示文本。
-
DataGridView:表示一个数据网格控件,用于显示和编辑表格式数据。
-
ComboBox:表示一个组合框控件,允许用户从下拉列表中选择一个选项。
-
ListBox:表示一个列表框控件,允许用户选择一个或多个选项。
-
CheckBox:表示一个复选框控件,允许用户选择或取消选择。
-
RadioButton:表示一个单选按钮控件,通常与其他单选按钮一起使用,允许用户选择一个选项。
常见控件
-
Button:按钮,用户点击以触发操作。
-
Label:标签,用于显示文本或说明。
-
TextBox:文本框,用户可以在其中输入文本。
-
ComboBox:组合框,提供下拉列表供用户选择。
-
ListBox:列表框,显示一组项供用户选择。
-
CheckBox:复选框,用户可以选中或取消选中。
-
RadioButton:单选按钮,用户可以选择一个选项。
-
PictureBox:图片框,用于显示图像。
-
ProgressBar:进度条,用于显示操作的进度。
-
TabControl:选项卡控件,允许在多个选项卡之间切换。
事件
-
Click:当用户点击控件时触发的事件。
-
TextChanged:当控件的文本内容发生变化时触发的事件。
-
Load:当窗体加载时触发的事件。
-
FormClosing:当窗体即将关闭时触发的事件。
-
MouseEnter:当鼠标指针进入控件时触发的事件。
-
MouseLeave:当鼠标指针离开控件时触发的事件。
布局控件
-
FlowLayoutPanel:流布局面板,控件按顺序排列。
-
TableLayoutPanel:表格布局面板,控件按网格排列。
-
Panel:面板,用于容纳其他控件。
这些只是Windows Forms中的一部分常见概念、类和控件。Windows Forms 提供了丰富的控件和类库,允许开发者构建功能强大且用户友好的桌面应用程序。
2.6) 问题06:WPF 中有哪些常见的概念,类和控件等
Windows Presentation Foundation (WPF) 是用于创建桌面应用程序的强大框架。以下是一些在 WPF 中常见的概念、类和控件:
常见概念
- XAML (Extensible Application Markup Language): 一种用于定义 WPF 界面的标记语言。
- 数据绑定: 将UI元素绑定到数据源的机制,支持双向绑定。
- 样式和模板: 定义和复用UI元素外观的方式。
- 资源: 定义和管理可重用的对象和样式。
- 依赖属性: 支持WPF高级功能的属性系统。
- 路由事件: 一种事件处理机制,可在元素树中冒泡或隧道传递事件。
常见类
- Application: 表示WPF应用程序的类。
- Window: 表示一个窗口。
- UserControl: 用于创建自定义控件的基类。
- FrameworkElement: 大多数WPF控件的基类。
- DependencyObject: 依赖属性系统的基类。
- Dispatcher: 管理线程间的工作调度。
常见控件
- Button: 表示一个按钮。
- TextBox: 表示一个文本输入框。
- Label: 表示一个标签,用于显示文本。
- ComboBox: 表示一个下拉列表。
- ListBox: 表示一个列表框。
- Grid: 一个用于定义行和列布局的容器。
- StackPanel: 一个用于在水平或垂直方向上排列子元素的容器。
- Canvas: 一个用于绝对定位子元素的容器。
- DockPanel: 一个用于将子元素停靠到容器边缘的容器。
- TabControl: 一个用于创建选项卡界面的控件。
数据绑定相关类
- Binding: 定义数据绑定的类。
- BindingExpression: 表示单个绑定的实例。
- IValueConverter: 用于在绑定时转换数据的接口。
- INotifyPropertyChanged: 通知属性值更改的接口。
资源和样式相关类
- ResourceDictionary: 用于存储资源的字典。
- Style: 定义控件外观的类。
- ControlTemplate: 定义控件结构和行为的模板。
- DataTemplate: 定义数据展示方式的模板。
通过这些概念、类和控件,你可以创建功能丰富且用户界面友好的WPF应用程序。
三、09.13 周五
3.1)问题01: git怎么查询本地有哪些 commit没有 push到远端?
你可以使用 git log 命令来查询本地有哪些 commit 没有 push 到远端。具体步骤如下:
- 打开终端并进入你的 Git 仓库目录。
- 运行以下命令:
git log origin/your-branch..your-branch
其中 your-branch 是你当前所在的分支的名称。例如,如果你当前在 main 分支上,命令将是:
git log origin/main..main
这个命令将显示自从你上次从远端拉取代码后,当前分支上新增的 commit。
另外,你也可以使用以下命令来查看本地和远端分支的差异:
git log HEAD..origin/your-branch
这个命令显示的是远端分支上有而本地分支上没有的 commit。
为了简化操作,你还可以使用 git status 命令来检查是否有未推送的 commit:
git status
如果有未推送的 commit,git status 会在输出中显示类似以下的信息:
Your branch is ahead of 'origin/your-branch' by X commits.
其中 X 是未推送的 commit 数量。
四、09.14 周六
4.1)问题01:C#代码中的 dll文件
在C#中,DLL(动态链接库)文件是一种包含可重用代码和资源的文件。DLL文件可以包含类、方法、属性等,可以在不同的C#项目中共享和使用。使用DLL文件的主要好处是代码重用、模块化和易于维护。
以下是如何在C#项目中创建和使用DLL文件的基本步骤:
创建DLL文件
-
创建类库项目:
打开Visual Studio并创建一个新的项目,选择“类库”(Class Library)项目类型。这将生成一个DLL文件。 -
编写代码:
在类库项目中编写你希望封装在DLL中的代码。例如:namespace MyLibrary {public class MyClass{public string GetMessage(){return "Hello from MyLibrary!";}} } -
构建项目:
构建(Build)类库项目,Visual Studio将生成一个DLL文件,通常位于项目的bin\Debug或bin\Release文件夹中。
使用DLL文件
-
引用DLL文件:
在你希望使用DLL文件的项目中,右键点击“引用”(References)节点,选择“添加引用”(Add Reference),然后选择“浏览”(Browse)并找到你生成的DLL文件。 -
使用命名空间:
在代码文件中使用using语句引入DLL文件中的命名空间,然后可以创建类的实例并调用其方法。例如:using MyLibrary;class Program {static void Main(){MyClass myClass = new MyClass();Console.WriteLine(myClass.GetMessage());} }
示例
以下是一个完整的示例,展示如何创建和使用DLL文件:
-
创建类库项目:
// MyLibrary.cs namespace MyLibrary {public class MyClass{public string GetMessage(){return "Hello from MyLibrary!";}} } -
构建类库项目:
生成MyLibrary.dll文件。 -
在另一个项目中引用并使用DLL文件:
// Program.cs using System; using MyLibrary;class Program {static void Main(){MyClass myClass = new MyClass();Console.WriteLine(myClass.GetMessage());} }
通过以上步骤,你可以创建和使用C#中的DLL文件,从而实现代码的重用和模块化。
4.2) 问题02: C#中的注解(特性)
在C#中,注解(Annotation)通常被称为“特性”(Attributes)。特性是用于在代码中添加元数据的一种方法。你可以使用特性来标注类、方法、属性、字段等,使得这些元素在运行时或编译时能够被识别和处理。
以下是一个简单的示例,展示如何在C#中使用特性:
using System;// 自定义一个特性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{public string Description { get; }public MyCustomAttribute(string description){Description = description;}
}// 使用自定义的特性
[MyCustomAttribute("This is a sample class")]
public class SampleClass
{[MyCustomAttribute("This is a sample method")]public void SampleMethod(){// 方法体}
}class Program
{static void Main(){// 获取类的特性var classAttributes = typeof(SampleClass).GetCustomAttributes(typeof(MyCustomAttribute), false);foreach (MyCustomAttribute attr in classAttributes){Console.WriteLine($"Class Attribute Description: {attr.Description}");}// 获取方法的特性var methodAttributes = typeof(SampleClass).GetMethod("SampleMethod").GetCustomAttributes(typeof(MyCustomAttribute), false);foreach (MyCustomAttribute attr in methodAttributes){Console.WriteLine($"Method Attribute Description: {attr.Description}");}}
}
在这个示例中,我们定义了一个自定义特性 MyCustomAttribute,并将其应用到一个类和一个方法上。然后,在 Main 方法中,我们通过反射获取并打印这些特性的信息。
C# 中有许多内置的特性,如 [Obsolete]、[Serializable]、[DllImport] 等,你也可以根据需要定义自己的特性。
4.3) 问题03:AssemblyInfo.cs文件 [assembly: AssemblyTitle(“MyCode.Entity”)]
这段代码是C#语言中的一个属性(Attribute),用于为程序集(Assembly)提供元数据。具体来说,它设置了程序集的标题信息。
详细解释如下:
assembly::这是一个特性(Attribute)目标指示符,表明接下来的特性是应用于整个程序集的。AssemblyTitle:这是一个特性类,用于指定程序集的标题。标题通常是一个简短的描述,用于标识程序集的用途或内容。"JD.WMS3.Checkstock.Entity":这是传递给AssemblyTitle特性的参数,也就是程序集的标题。在这个例子中,标题是JD.WMS3.Checkstock.Entity,这可能表示这个程序集与京东(JD)的WMS(仓库管理系统)的盘点(Checkstock)相关的实体(Entity)有关。
该特性通常放置在 AssemblyInfo.cs 文件中,用于描述程序集的一些基本信息。这样的信息在生成的程序集文件(如DLL或EXE)中是可见的,并且可以在查看程序集的属性时看到。
例如,AssemblyInfo.cs 文件中的其他类似特性可能包括:
AssemblyDescription:程序集的描述。AssemblyConfiguration:程序集的配置(如Debug或Release)。AssemblyCompany:程序集的公司名称。AssemblyProduct:程序集的产品名称。
这些元数据有助于管理和识别程序集,特别是在大型项目和团队协作开发中。
4.4)问题04:C#中 using 块语句
在C#中,using块语句用于确保实现了IDisposable接口的对象在使用完之后能够被正确地释放和清理。这通常用于管理非托管资源,如文件句柄、数据库连接等。
典型的using块语句的语法如下:
using (var resource = new SomeDisposableResource())
{// 使用resource
}
在using块结束时(大括号闭合处),resource对象的Dispose方法会被自动调用,无需显式调用Dispose方法。这有助于避免资源泄漏,并使代码更简洁和易读。
以下是一个具体的示例,演示了如何使用using块来管理文件资源:
using System;
using System.IO;class Program
{static void Main(){string path = "example.txt";// 使用 using 块处理文件资源using (StreamWriter writer = new StreamWriter(path)){writer.WriteLine("Hello, World!");}// 文件写入操作完成,StreamWriter 的 Dispose 方法已经被调用Console.WriteLine("文件已写入并关闭。");}
}
在这个例子中,StreamWriter实现了IDisposable接口,因此可以使用using块来确保文件在写入操作完成后被正确关闭。
需要注意的是,using块可以嵌套使用,以处理多个可处置对象:
using (var resource1 = new SomeDisposableResource())
{using (var resource2 = new AnotherDisposableResource()){// 使用 resource1 和 resource2}
}
在这种情况下,resource2会在using块结束时首先被释放,然后是resource1。这种嵌套使用方式确保了每个资源都能被正确地释放。
4.5)问题05:WinForm中的 Form类的使用
在WinForms应用程序中,Form类是所有窗口的基类。它提供了创建、显示和管理窗口的基本功能。以下是一些关于Form类的关键点和如何使用它的示例:
1. 创建一个基本的Form
首先,你需要创建一个新的Windows Forms应用程序。然后,你可以继承Form类来创建自定义窗口。
using System;
using System.Windows.Forms;public class MyForm : Form
{public MyForm(){// 设置窗口的标题this.Text = "My First WinForm";// 设置窗口的大小this.Size = new System.Drawing.Size(800, 600);// 可以在这里添加控件和其他初始化代码}[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);// 创建并运行主窗口Application.Run(new MyForm());}
}
2. 添加控件
你可以在Form中添加各种控件,如按钮、标签、文本框等。
public class MyForm : Form
{private Button myButton;public MyForm(){this.Text = "My First WinForm with Button";this.Size = new System.Drawing.Size(800, 600);// 初始化按钮myButton = new Button();myButton.Text = "Click Me!";myButton.Location = new System.Drawing.Point(350, 250);// 添加按钮的点击事件处理程序myButton.Click += new EventHandler(MyButton_Click);// 将按钮添加到Form中this.Controls.Add(myButton);}private void MyButton_Click(object sender, EventArgs e){MessageBox.Show("Button Clicked!");}
}
3. 处理事件
WinForms使用事件驱动编程模型。你可以通过订阅事件来处理用户交互。
private void MyButton_Click(object sender, EventArgs e)
{MessageBox.Show("Button Clicked!");
}
4. 显示和关闭窗口
你可以使用Show和Close方法来显示和关闭窗口。
public class MyForm : Form
{private Button closeButton;public MyForm(){this.Text = "Form with Close Button";this.Size = new System.Drawing.Size(800, 600);closeButton = new Button();closeButton.Text = "Close";closeButton.Location = new System.Drawing.Point(350, 250);closeButton.Click += new EventHandler(CloseButton_Click);this.Controls.Add(closeButton);}private void CloseButton_Click(object sender, EventArgs e){this.Close();}
}
5. 设置窗口属性
你可以设置Form的各种属性,如StartPosition、FormBorderStyle、BackColor等。
public MyForm()
{this.Text = "Custom Form";this.Size = new System.Drawing.Size(800, 600);this.StartPosition = FormStartPosition.CenterScreen; // 居中显示this.FormBorderStyle = FormBorderStyle.FixedDialog; // 固定边框this.BackColor = System.Drawing.Color.LightBlue; // 背景颜色
}
总结
Form类是WinForms应用程序的核心,它提供了创建和管理窗口的基本功能。通过继承Form类,你可以创建自定义窗口,添加控件,处理事件以及设置各种属性。这个过程使得开发桌面应用程序变得相对简单和直观。
相关文章:
技术周总结 09.09~09.15周日(C# WinForm WPF)
文章目录 一、09.09 周一1.1) 问题01: Windows桌面开发中,WPF和WinForm的区别和联系?联系:区别: 二、09.12 周四2.1)问题01:visual studio的相关快捷键有哪些?通用快捷键编辑导航调试窗口管理 2…...
4K投影仪选购全攻略:全玻璃镜头的当贝F6,画面细节纤毫毕现
在当今的投影市场上,4K投影仪已经成了主流产品,越来越多家庭开始关注如何选择一款性价比高、口碑好的4K投影仪。4K投影仪其实指的是具备3840*2160像素分辨率投影仪,它能够提供更清晰、更细腻、更真实的画面效果。 那么4K投影仪该怎么选&…...
除了字符串前导的*号之外,将串中其它*号全部删除
要求 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。 例如,字符串中的内容为:-**…...
SpringBoot开发——使用@Slf4j注解实现日志输出
文章目录 1、Lombok简介2、SLF4J简介3、实现步骤3.1 创建SpringBoot项目3.2 添加依赖3.3 使用 Slf4j 注解3.4 输出日志信息 4、结论 在现代Java开发中,日志记录是至关重要的。它不仅帮助开发者调试代码,还便于监控系统运行状态和性能。 Lombok 和 SLF4J …...
VSCode拉取远程项目
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
【已解决】SpringBoot3项目整合Druid依赖:Druid监控页面404报错
文章标题 问题描述原因分析解决方案参考资料 问题描述 最近,笔者在SpringBoot3项目中整合Druid连接池时,偶然翻到一条介绍Druid监控的短视频,兴致盎然之下尝试设置了一下Druid监控。 But,按照视频中提供的yml参数对照设置&#x…...
【算法】滑动窗口—找所有字母异位词
“找到字符串中所有字母异位词”的难度为Medium,看一下题目: 给定一个字符串 S 和一个非空字符串 T,找到 S 中所有是 T 的字母异位词的子串,返回这些子串的起始索引。 所谓的字母异位词,其实就是全排列,原题…...
Vue安装及环境配置【图解版】
欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words! 目录 一.node.js的安装…...
绕过CDN查找真实IP方法
1、前言 在新型涉网案件中,我们在搜集到目标主站之后常常需要获取对方网站的真实IP去进一步的信息搜集,但是现在网站大多都部署了CDN,将资源部署分发到边缘服务器 实现均衡负载,降低网络堵塞,让用户能够更快地访问自己…...
Qt与MQTT交互通信
MQTT全称是(Message Queuing Telemetry Transport),即消息队列遥测传输协议 是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,并且该协议构建于TCP/IP协议之上,常用于互联网中&am…...
dd 命令:复制和转换文件
一、dd 命令简介 dd 命令是一个在 Unix 和类 Unix 系统中用于复制文件和转换文件的命令行工具。它的功能非常强大,可以用于各种目的,例如创建镜像文件、备份和恢复数据、复制数据等。 dd 是一个用于读取、转换和写入数据的工具,通常…...
文件系统(磁盘 磁盘文件 inode)
文章目录 磁盘看看物理磁盘磁盘的存储结构 对磁盘的储存进行逻辑抽象inode号文件名 -> inode判断文件在哪个分区 磁盘 电脑中存在非常多的文件,被打开的文件只是少量的。 没有被打开的文件,在磁盘中放着,那么文件是如何存取? …...
ThreeJs创建圆环
ThreeJs除了创建基本的长方体,球形,圆柱等几何体,也可以创建一些特殊的几何体,比如圆环,多边体,这节就来讲怎么用Threejs绘制出圆环。首先依然是要创建出基础的组件,包括场景,相机&a…...
React实现类似Vue的路由监听Hook
React实现类似Vue的路由监听Hook 监听路由变化;React Hook封装,返回回调函数,新旧路由为函数参数; 代码 import { useEffect, useRef } from react; import { useHistory, useLocation } from react-router-dom;/*** 监听路由变…...
Visual Studio打开项目的一些小技巧
Visual Studio(VS)是一款功能强大的集成开发环境,许多刚入门C/C的小白也会使用这款软件进行写代码,然而它的操作并不简单,下面将讲解一下VS打开项目文件的一些小技巧。 目录 🎁创建空项目 ❤️①点击“创建新项目” ❤️②点击“…...
前端页面中使用 ppt 功能,并且可以随意插入关键帧
要在前端页面中实现类似 PowerPoint 的功能,并且能够随意插入和控制关键帧动画,你可以使用 HTML、CSS 和 JavaScript 结合的方式来创建一个互动幻灯片系统。以下是一个详细的实现方案,包括如何插入和控制关键帧动画: 1. 基础 HTM…...
机器学习:opencv--图像金字塔
目录 一、图像金字塔 1.图像金字塔是什么? 2.有哪些常见类型? 3.金字塔的构建过程 4.图像金字塔的作用 二、图像金字塔中的操作 1.向下采样 2.向上采样 3.注意--无法复原 三、代码实现 1.高斯金字塔向下采样 2.高斯金字塔向上采样 3.无法复…...
linux安全软件Hydra使用教程
Hydra 是一个强大的网络登录工具,常用于渗透测试,支持对多种服务和协议(如 SSH、FTP、HTTP 等)进行暴力crack攻击。它可以通过字典攻击来测试用户名和密码的有效性。以下是关于如何使用 Hydra 的基本步骤和示例: 1. 安…...
【ShuQiHere】从晶体管到逻辑门:数字电路的构建之旅
【ShuQiHere】 现代计算机和电子设备的基础是逻辑电路(Logic Circuits),它们执行信息处理和运算任务。在这些电路的核心,是晶体管(Transistors) 和 逻辑门(Logic Gates)。通过理解这…...
PDF扫描版文字识别OCR
PDF扫描版文字识别OCR 最近需要有对PDF扫描版进行文字可识别的需求,这里介绍一款工具挺好用的 这是一款开源的OCR工具 github地址 https://github.com/hiroi-sora/Umi-OCR 主要功能及特点 免费:本项目所有代码开源,完全免费。方便&#…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
