拖动一个控件到窗体,VS 自动在 xxx.Designer.cs生成的都有什么?
第一步 声明控件字段
定义一个代表该控件的私有变量
cs
private System.Windows.Forms.ListBox listBox1;
新版.NET可以直接写,因为已经引用了,System.Windows.Forms命名空间
cs
private Button button1;
作用:让整个窗体类都能调用这个控件,因为如果只new只能是局部变量,而这个字段是类全局可用
第二步 InitializeComponent() 里 new 实例
cs
this.listBox1=new System.Windows.Forms.ListBox();
作用:创建一个控件对象,没有控件对象什么都做不了
第三步 自动赋值默认属性
自动生成一堆属性默认值,如果在窗体改,这里会自动同步
cs
// 1. 基础通用属性(所有控件都有)
this.listBox1.Location = new System.Drawing.Point(30, 30);
this.listBox1.Size = new System.Drawing.Size(120, 150);
this.listBox1.BackColor = System.Drawing.Color.White;
this.listBox1.ForeColor = System.Drawing.Color.Black;
this.listBox1.Font = new System.Drawing.Font("微软雅黑", 9F);
this.listBox1.Enabled = true;
this.listBox1.Visible = true;
this.listBox1.Name = "listBox1";
// 2. ListBox 独有专属属性
this.listBox1.SelectionMode = System.Windows.Forms.SelectionMode.One;
this.listBox1.Sorted = false;
this.listBox1.MultiColumn = false;
第四步 把控件加入窗体的控件集合
cs
this.Controls.Add(this.listBox1);
- 不加这一行:就算你 new 了、设了属性,窗体上也看不见
- 原理:窗体(Form)本质是一个大容器 所有按钮、输入框、列表框,都存在
Controls集合里,加进去才会渲染显示。
如果是拖进 Panel / GroupBox:就会变成:
cs
panel1.Controls.Add(listBox1);
(非必须)布局、资源、初始化收尾
InitializeComponent()作用?
cs
// 布局适配
this.listBox1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left;
this.listBox1.TabIndex = 1;
// 如果后续你绑定了事件,还会自动加:
// this.listBox1.SelectedIndexChanged += new EventHandler(xxx);
InitializeComponent()是窗体,控件的组件初始化入口方法
1.控件实例化(new 控件对象)
2.设置控件的基础属性(大小,文本,样式等)
3.绑定控件事件
4.把控件添加到窗体/父容器
事件绑定
方式 A:通过 Visual Studio 设计器(最常用)
-
在设计视图中选中控件。
-
在"属性"窗口点击 闪电图标。
-
找到目标事件(如
Click),双击右侧空白处。 -
VS 会自动生成方法并在
InitializeComponent()中完成绑定。
方式 B:手动代码绑定
如果你需要动态创建控件或在运行时更改逻辑,可以使用 += 运算符:
cs
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 手动订阅事件
myButton.Click += new EventHandler(MyButton_Click);
}
// 事件处理程序
private void MyButton_Click(object sender, EventArgs e)
{
MessageBox.Show("按钮被点击了!");
}
}
所有控件通用的核心属性
外观,位置,状态
1. Name
- 控件的名字(代码里用它找到控件)
- 例:
listBox1
2. Text
- 控件显示的文字
- ListBox 里很少用,主要给 Button/Label 用
3. Size(Width / Height)
- 控件的宽度、高度
4. Location(X / Y)
- 控件在窗体上的坐标位置
5. Enabled
true:可用false:灰色、不可点击
6. Visible
true:显示false:隐藏
7. BackColor
- 背景颜色
8. ForeColor
- 文字颜色
9. Font
- 字体、字号、加粗、斜体
10. Cursor
- 鼠标移上去的指针样式(箭头、手型、等待)
11. Dock
- 停靠方式:置顶、置底、填充满、靠左、靠右
12. Anchor
- 窗体缩放时,控件跟着哪一边固定
13. Margin
- 控件与其他控件的间距
14. Padding
- 控件内部内容的边距
15. TabIndex
- 按 Tab 键切换焦点的顺序
16. TabStop
- 是否允许按 Tab 键选中这个控件
17. ContextMenuStrip
- 右键菜单
18. Tag
- 万能备用属性,存任何数据(不显示、不影响功能)
所有控件通用的常用事件
1. Click
- 鼠标单击时触发
2. DoubleClick
- 鼠标双击时触发
3. MouseEnter
- 鼠标进入控件区域时
4. MouseLeave
- 鼠标离开控件区域时
5. MouseDown
- 鼠标按键按下时
6. MouseUp
- 鼠标按键松开时
7. MouseMove
- 鼠标在控件上移动时
8. KeyDown
- 键盘按键按下时(控件有焦点才触发)
9. KeyUp
- 键盘按键松开时
10. KeyPress
- 按下字符键时(输入文字用)
11. Enter
- 控件获得焦点时(Tab 切过来 / 鼠标点中)
12. Leave
- 控件失去焦点时
13. Resize
- 控件大小改变时
14. Paint
- 控件重绘时(自定义画外观)
15. GotFocus / LostFocus
- 得到焦点 / 失去焦点(老版本事件,现在用 Enter/Leave)
所有控件通用的状态变化事件
只要属性变了就触发,所有控件都有:
BackColorChanged背景色变了ForeColorChanged文字色变了FontChanged字体变了SizeChanged大小变了LocationChanged位置变了EnabledChanged可用状态变了VisibleChanged显示隐藏变了DockChanged停靠变了CursorChanged鼠标样式变了
正确删除控件的流程(不会报错):
- 选中控件 → 按 Delete
- 打开
Form1.Designer.cs - 搜索控件名字(如 button1)
- 把剩下的残留代码全部删掉
- 变量声明
- 事件绑定
- 回到
Form1.cs - 把事件方法也删掉
只在界面删控件:✅ 删:new、位置、大小、样式、Controls.Add❌ 剩:控件声明、事件绑定、事件方法、你手写的访问代码
listBox独有属性
1.SelectionMode
- 作用:设置列表的选择模式
- 可选值:
None:不能选One:只能选 1 项(默认)MultiSimple:简单多选(点一下选 / 取消)MultiExtended:高级多选(Ctrl/Shift 多选)
2. MultiColumn
- 作用 :是否开启多列显示
- 开启后,内容多了会自动横向排列(生成一个横向的滑动条而不是竖向的),而不是一直往下滚
3. ColumnWidth
- 作用:多列模式下,设置每一列的宽度
- 必须配合
MultiColumn = true使用
固定一列的宽度
4.HorizontalScrollbar
- 作用 :是否显示水平滚动条
- 内容太长超出宽度时才会出现
5.ScrollAlwaysVisible
作用 :无论内容多少,永远显示垂直滚动条(占位用)
6.Sorted
- 作用 :是否让列表项自动按字母排序
- 设为 true 后,添加项会自动排序
7.DrawMode
- 作用 :设置列表项的绘制模式
- 可选:
Normal:正常系统绘制OwnerDrawFixed:自定义固定高度OwnerDrawVariable:自定义每一项不同高度
8.ItemHight
- 作用:设置每一项的高度
- 只有
DrawMode不是 Normal 时才有效
9.UseTabStops
- 作用 :是否让列表项支持
\t制表符对齐 - 很少用,但确实是独有
listBox独有事件
1.SelectedIndexChanged
- 触发时机:选中项的索引改变时
- 用途:最常用!用户点了不同项,你在这里写逻辑
2.SelectedValueChanged
- 触发时机:选中项的 Value 值改变时
- 用途:数据绑定场景用(比如绑定 ID / 文本)
3.DrawItem
- 触发时机:每一项被绘制时
- 用途:自定义每一项的颜色、图标、字体、样式
4. MeasureItem
- 触发时机:计算每一项高度时
- 用途:自定义每一项高度(多行文本、大项)
5. ItemCheck
- 触发时机 :项的勾选状态即将改变时
- 用途:拦截勾选、判断是否允许勾选
6.ItemChecked
- 触发时机 :项的勾选状态已经改变后
- 用途:勾选后执行逻辑(统计、更新)
listBox独有方法
1. SetSelected(index, true/false)
- 用代码选中 / 取消某一项
2. ClearSelected()
- 取消所有选中
3. FindString()
- 根据文字查找项的索引
4. FindStringExact()
- 精确查找文字
5. GetSelected(index)
- 判断某一项是否被选中