知识点
命名空间有什么用
- 命名空间(Namespace)在 C# 中提供了逻辑上的组织和名称空间的分离,但它并不强制进行严格的隔离。命名空间的主要目的是为了组织代码、提供命名的作用域,以及避免命名冲突。
partial
窗口界面
文件中的结构,在cs里面需要定义什么会出现一个窗口,具有什么特征
-
有框架,winForm或者WPF,以下以winForm举例
-
窗口会有一个单独的类,比如winForm,需要继承于Form类,不同的框架有不同的特征
-
窗口如何显示:在主函数中主动实例化,并调用.Run函数
-
自动调用的函数winForm
-
构造函数
-
Load
-
Activated
-
Deactivate
-
FormClosing
-
Closed
-
-
Sender
触发事件的对象,通常表示本身或者引发事件的控件
-
EventArgs
通用的事件参数类型,通常是事件处理程序需要的信息的容器,可以为空
窗口和控件的组合方式(比如mfc中放在同一类中)
-
类中包含控件的实例变量,并在窗口的构造函数中,对空间的相应动作加上响应函数
private Button myButton; public MainForm() { // 初始化窗口 InitializeComponent(); // 初始化按钮 myButton = new Button(); myButton.Text = "Click me"; myButton.Click += MyButton_Click; // 将按钮添加到窗口中 Controls.Add(myButton); } private void MyButton_Click(object sender, EventArgs e) { MessageBox.Show("Button clicked!"); }
-
事件绑定响应
- 在使用 Windows Forms 开发中,你可以通过 Visual Studio 的可视化设计器或者查阅相关文档来了解控件的事件以及如何为这些事件绑定处理程序。这些事件是特定于 Windows Forms 框架的。
- 在 Visual Studio 中查看事件:
- 可视化设计器: 打开你的窗体,切换到 “视图”(View)菜单下的 “属性”(Properties)窗口。在属性窗口中,你可以找到 “事件”(Events)选项卡。在这里,你可以看到该控件可用的事件列表,并在相应事件上双击以自动生成处理程序的框架。
- 代码视图: 在代码文件中,你可以使用 IntelliSense(代码提示)功能。输入控件的实例名称后,使用点号(
.
)来访问它的属性和事件。 IntelliSense 将显示出可用的属性和事件。通过输入事件名称并按下 Tab 键,可以为事件自动生成处理程序框架。
- MSDN 或 Microsoft 文档: Microsoft 的文档中包含了对 Windows Forms 控件的详细说明,其中包括每个控件支持的事件。你可以在 Microsoft 文档网站上找到相关内容。
- Visual Studio 帮助文档: 在 Visual Studio 中,你可以使用 F1 键打开帮助文档,然后搜索你感兴趣的控件或事件,以获取详细信息。
- 在 Visual Studio 中查看事件:
- 在 Windows Presentation Foundation (WPF) 中,事件的绑定方式与 Windows Forms 有些不同。在 WPF 中,你可以使用 XAML(eXtensible Application Markup Language)来声明事件的处理程序。WPF 的事件系统也更加灵活,支持一些附加事件(Attached Events)等概念。
- 如何知道事件响应函数写法:进入相应动作,进入动作的类型,会有相关写法格式,所以后续需要什么信息也直接搜索相关内容即可
- 在使用 Windows Forms 开发中,你可以通过 Visual Studio 的可视化设计器或者查阅相关文档来了解控件的事件以及如何为这些事件绑定处理程序。这些事件是特定于 Windows Forms 框架的。
-
在通常情况下,你只需要在窗体的构造函数中调用
InitializeComponent
方法,而不需要手动编辑它。InitializeComponent
方法包含了窗体和控件的初始化代码,是由可视化设计器自动生成的。public MainForm() { InitializeComponent(); // 在这里可以添加额外的初始化逻辑 }
响应,cs的窗口点击动作如何传到窗口或控件上,如何响应,响应函数写法
列表控件操作ListView
坑
-
projectList.View = View.Details; 属性不设置的话,会出现都在一行的情况,不知道为什么
-
click、mouseclick、mouseDown、mouseUp的区别
前两个点到项目上才可以,后面两个空白的也行
private void projectListView_MouseUp(object sender, MouseEventArgs e) { ListView listView = (ListView)sender; ListViewItem item = listView.GetItemAt(e.X, e.Y); if (e.Button == MouseButtons.Right) { ContextMenuStrip listRBtnMenu = new ContextMenuStrip(); ToolStripMenuItem menuAdd = new ToolStripMenuItem("Add"); ToolStripMenuItem menuRemove = new ToolStripMenuItem("Remove"); menuAdd.Click += AddNewProjectToList; menuRemove.Click += RemoveProjectFromList; if (item == null) { listRBtnMenu.Items.Add(menuAdd); } else { listRBtnMenu.Items.Add(menuAdd); listRBtnMenu.Items.Add(menuRemove); } } }
右键菜单
坑
-
弹不出来
-
主动绑定控件 yourControl.ContextMenuStrip = contextMenuStrip; 会在右键响应时自动调用
-
如果鼠标响应被重写,可能导致弹不出来,此时主动show即可
private void CustomMouseClick(object sender, MouseEventArgs e) { // 在鼠标点击位置显示右键菜单 if (e.Button == MouseButtons.Right) { Point mousePosition = new Point(e.X, e.Y); contextMenuStrip.Show(this, mousePosition); } }
-
-
顶级菜单和子菜单的添加子项方式不同
contextMenuStrip.Items.Add(menuItem1);
和subMenu.DropDownItems.Add(subMenuItem1);
的区别在于它们所属的菜单层级。contextMenuStrip.Items.Add(menuItem1);
:- 这是将一个顶级菜单项(不属于任何子菜单)添加到
contextMenuStrip
中的语法。这个菜单项将显示在主菜单上,不包含在任何子菜单中。 contextMenuStrip
本身是ContextMenuStrip
类型,表示整个右键菜单。
- 这是将一个顶级菜单项(不属于任何子菜单)添加到
subMenu.DropDownItems.Add(subMenuItem1);
:- 这是将一个菜单项添加到
subMenu
子菜单的语法。subMenu
可以是ToolStripMenuItem
或ContextMenuStrip
类型,表示一个包含子菜单项的父级菜单。 subMenu.DropDownItems
表示subMenu
菜单中的所有项,包括主菜单项和子菜单项。
- 这是将一个菜单项添加到
private void InitializeContextMenu() { // 创建右键菜单 contextMenuStrip = new ContextMenuStrip(); // 添加主菜单项 menuItem1 = new ToolStripMenuItem("Menu Item 1"); menuItem1.Click += MenuItem1_Click; menuItem2 = new ToolStripMenuItem("Menu Item 2"); menuItem2.Click += MenuItem2_Click; contextMenuStrip.Items.Add(menuItem1); contextMenuStrip.Items.Add(menuItem2); // 添加子菜单项 subMenu = new ToolStripMenuItem("Sub Menu"); ToolStripMenuItem subMenuItem1 = new ToolStripMenuItem("Sub Menu Item 1"); subMenuItem1.Click += SubMenuItem1_Click; ToolStripMenuItem subMenuItem2 = new ToolStripMenuItem("Sub Menu Item 2"); subMenuItem2.Click += SubMenuItem2_Click; subMenu.DropDownItems.Add(subMenuItem1); subMenu.DropDownItems.Add(subMenuItem2); // 将子菜单添加到主菜单 contextMenuStrip.Items.Add(subMenu); }
配置文件读取
string strConnect = ConfigurationManager.AppSettings["ConnectionString"];
这句话中从配置文件的ConnectionString中读取相关字符串 ,与xaml类似,根据key
<configuration>
<appSettings>
<add key="ConnectionString" value="your_connection_string_here" />
</appSettings>
</configuration>
ConfigurationManager.AppSettings
默认读取当前应用程序的配置文件,这通常是 App.config
或 Web.config
文件。在 Web 应用程序中,它会读取 Web.config
文件;在桌面应用程序中,它会读取 App.config
文件
如果想自定义读取的文件
// 打开指定的配置文件
Configuration config = ConfigurationManager.OpenExeConfiguration("path_to_your_config_file");
// 获取其中的应用程序设置
string strConnect = config.AppSettings.Settings["ConnectionString"].Value;
你的应用程序名为 “sqlEc”,并且生成时会生成一个名为 “sqlEc.dll.config” 的配置文件。这种情况通常发生在.NET Framework 或 .NET Core 应用程序中,当你构建项目时,配置文件会被复制到输出目录,并重命名为 <assemblyName>.dll.config
的形式。