C#(Csharp)我的基础教程(四)(我的菜鸟教程笔记)-Windows项目结构分析、UI设计和综合事件应用的探究与学习

目录

windows项目是我们.NET学习一开始必备的内容。

1、窗体类(主代码文件+窗体设计器后台代码文件)

复制代码
主窗体对象的创建:在Program类里面:  Application.Run(new FrmMain());

这句代码就决定了,当前窗体是项目的主窗体。也就是作为项目的主线程运行。如果你关闭主窗体,整个项目会退出。

特点:继承自Form类。

部分类partial关键字。可以将两个同名的类关联起来,其实"这两个类"本质上是一个类,也就是为了方便维护和代码编写,把窗体设计器自动生成的代码,放到另一个部分类中。最后VS编译器编译的时候,还是编译到一起的。

这个可以通过ILDASM查询IL得到证实。

2、控件对象与窗体容器集合(Control)

【1】控件和组件的区别:控件是在窗体上可见的。组件是在窗体下面不可见的,也就是不占用窗体的空间。也就是没有可视化的界面。

【2】按钮控件的使用与代码分析。控件从拖放到显示,经过的步骤:

第一、创建该对象的成员变量。

第二、初始化这个成员变量的相关属性。(我们可以通过可视化属性窗口完成)

第三、窗体本身是一个容器,所有的控件,都会加到Controls集合中。

当我在窗体上添加一个容器控件的时候(比如GroupBox或者Panel)容器控件和其他的控件一样,也会被添加到Controls集合中。当我在容器中添加相关的控件的时候,这时候,容器中的控件,会添加到当前容器的Controls集合中,而不是窗体的Controls中,请大家务必记住。

3、Windows的事件驱动机制

【1】生活中的事件驱动机制。(疫情)下面是事件完整的模型:

提前指定疫情预案-->定义事件

针对疫情具体解决 -->处理事件

复制代码
预案和疫情关联-->关联事件

疫情出现激发预案 -->激发事件

【2】程序中的事件。以按钮单击事件分析模型。

第一、事件定义(框架自带的)框架已经提前定义好了相关事件。

第二、事件处理(我们选择的)

private void btnTestEvent_Click(object sender, EventArgs e)

{

复制代码
    }

第三、事件关联: this.btnTestEvent.Click += new System.EventHandler(this.btnTestEvent_Click);

第四、事件激发:(用户单击按钮的行为)

4、事件的统一关联

csharp 复制代码
  foreach ( Control item in this.Controls)
            {
                if ( item is Button && item.Tag.ToString() == "btn")
                {                      
                }
            }

Tag没有数据的时候,会出现null对象的问题:System.NullReferenceException:"未将对象引用设置到对象的实例。"

这个问题会经常出现。大家要学会判断。

当我们按照上面的方法,增加一个新的按钮,只需要设置一下Tag=btn,事件自动关联。

这个其实就是模拟了软件开发中,当用户需求变化的时候,我们可以扩展内容,但是没有修改内容。

这个正是面向对象编程中的"开闭原则"。开发扩展,封闭修改。

相关推荐
huoyueyi11 分钟前
《融天AI-APP从0到1开发实录》
开发语言·lua
zhangrelay16 分钟前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
Jimmy1 小时前
深夜突袭:我们的午夜战场
笔记·产品·电子书
OpenAnolis小助手2 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
阿尼卡~2 小时前
VS Code 配置 C 语言开发环境(Windows 10/11):从 GCC 安装到运行、断点调试,一篇搞定
c语言·开发语言·windows
志尊宝3 小时前
AI原生前端开发(025):端侧AI实战项目:智能笔记助手
人工智能·笔记·ai-native
lll23526917793 小时前
线下多人发言对比与录音操作
笔记·智能手机
hhhjhl4 小时前
Undici 跨端三方库仓颉适配全流程
java·开发语言·ubuntu
染指11104 小时前
158.Agent-LangGraph-子图(共享状态和不共享状态模式)
开发语言·人工智能·python·ui·agent·agents
wangchunyu1144 小时前
JAVA JVM内存结构与运行时数据区
java·开发语言·jvm