Winform创建与启动

拖动一个控件到窗体,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 设计器(最常用)

  1. 在设计视图中选中控件。

  2. 在"属性"窗口点击 闪电图标

  3. 找到目标事件(如 Click),双击右侧空白处。

  4. 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 鼠标样式变了

正确删除控件的流程(不会报错):

  1. 选中控件 → 按 Delete
  2. 打开 Form1.Designer.cs
  3. 搜索控件名字(如 button1)
  4. 把剩下的残留代码全部删掉
    • 变量声明
    • 事件绑定
  5. 回到 Form1.cs
  6. 把事件方法也删掉

只在界面删控件:✅ 删: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)

  • 判断某一项是否被选中
相关推荐
南境十里·墨染春水2 小时前
C++笔记——STL map
开发语言·c++·笔记
sjsjsbbsbsn2 小时前
OpenAI 接口协议 & 大模型Java调用 核心总结
java·开发语言
AI玫瑰助手2 小时前
Python基础:字典的键值对结构与增删改查操作
android·开发语言·python
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第16题:HashMap中Key为null时,元素存放的位置
java·开发语言·面试·哈希算法·散列表
武藤一雄2 小时前
WPF中逻辑树(Logical Tree)与可视化树(Visual Tree)到底是什么
microsoft·c#·.net·wpf·.netcore
yujunl2 小时前
AI工具生成一个页面的效果
开发语言
lly2024062 小时前
DOM 实例
开发语言
南境十里·墨染春水2 小时前
C++笔记·-- STL unordered_map
开发语言·c++·笔记
珹洺2 小时前
C++远程调用组件库JsonRpc(一)项目背景、核心概念与环境搭建
开发语言·c++·rpc