一、整体概述在 WinFormUserControl 自定义控件开发中可以通过一系列设计器特性控制属性在 VS 属性面板的展示样式、分类、默认值、提示信息同时可以手动手写布局控件脱离可视化设计器实现纯代码自定义控件。所有特性仅对VS设计器生效不影响程序运行逻辑。二、五大核心控件特性重点必考1. [Browsable(bool)] 可见性特性作用控制属性是否在 VS 右侧【属性面板】显示Browsable(true)默认值属性公开展示Browsable(false)属性隐藏属性面板看不到仅代码可用2. [Category(分组名)] 分类特性作用将自定义属性归类到指定分组整理属性面板界面案例[Category(佛得角)]、[Category(阿根廷)]自定义名称随意分组仅用于设计器展示无运行影响3. [Description(描述信息)] 备注特性作用鼠标选中属性时在VS底部展示属性功能说明用于提示使用者当前属性的作用提升控件易用性4. [DefaultValue(默认值)] 默认值特性核心视觉效果最特殊属性值 默认值 → 字体正常显示属性值 ≠ 默认值 → 字体加粗标识为已修改属性注意该特性不会自动赋值仅做设计器标记真正默认值需在代码/构造函数赋值。5. [DesignerCategory(Code)] 设计器特性作用标记当前类为纯代码类告诉VS此类没有可视化设计界面禁止打开拖拽设计窗口多用于手写布局的自定义控件6. [Obsolete] 兼容特性可用于控件属性标记标识属性过时、不推荐使用设计器会提示警告。三、可视化自定义控件带设计器完整源码继承 UserControl、自带可视化界面属性绑定文本框搭配全套设计特性using System; using System.ComponentModel; using System.Windows.Forms; namespace _7_自定义控件常用的特性 { public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } /// summary /// 账号属性绑定文本框配置全套设计器特性 /// /summary [Browsable(true)] // 属性面板可见 [Category(佛得角)] // 自定义分组 [Description(账号的内容)] // 属性描述说明 [DefaultValue(佛得角)] // 默认标记值控制加粗样式 public string Account { get { return textBox1.Text; } set { textBox1.Text value; } } /// summary /// 密码属性标记过时 /// /summary [Description(密码)] [Category(阿根廷)] [DefaultValue(123)] [Obsolete(不建议使用此属性)] public string Password { get { return textBox2.Text; } set { textBox2.Text value; } } } }四、纯手写自定义控件无设计器完整源码不使用可视化拖拽纯代码创建所有控件、布局搭配 DesignerCategory 特性using System.Windows.Forms; namespace _7_自定义控件常用的特性 { // 标记为纯代码类禁止打开设计器 [DesignerCategory(Code)] internal class UserLoin : UserControl { // 手动声明所有子控件 private Label label1; private TextBox textBox1; private Label label2; private TextBox textBox2; private Button button1; public UserLoin() { InitializeComponent(); } // 纯代码初始化所有控件、位置、样式、布局 private void InitializeComponent() { this.label1 new System.Windows.Forms.Label(); this.textBox1 new System.Windows.Forms.TextBox(); this.label2 new System.Windows.Forms.Label(); this.textBox2 new System.Windows.Forms.TextBox(); this.button1 new System.Windows.Forms.Button(); this.SuspendLayout(); // label1 账号标签 this.label1.AutoSize true; this.label1.Location new System.Drawing.Point(97, 51); this.label1.Name label1; this.label1.Size new System.Drawing.Size(70, 24); this.label1.TabIndex 0; this.label1.Text 账号:; // textBox1 账号输入框 this.textBox1.Location new System.Drawing.Point(207, 51); this.textBox1.Name textBox1; this.textBox1.Size new System.Drawing.Size(244, 35); this.textBox1.TabIndex 1; // label2 密码标签 this.label2.AutoSize true; this.label2.Location new System.Drawing.Point(97, 128); this.label2.Name label2; this.label2.Size new System.Drawing.Size(70, 24); this.label2.TabIndex 0; this.label2.Text 密码:; // textBox2 密码输入框 this.textBox2.Location new System.Drawing.Point(207, 125); this.textBox2.Name textBox2; this.textBox2.Size new System.Drawing.Size(244, 35); this.textBox2.TabIndex 1; // button1 登录按钮 this.button1.Location new System.Drawing.Point(207, 240); this.button1.Name button1; this.button1.Size new System.Drawing.Size(131, 52); this.button1.TabIndex 2; this.button1.Text 登录; this.button1.UseVisualStyleBackColor true; // 将所有控件添加到自定义控件容器 this.Controls.Add(this.button1); this.Controls.Add(this.textBox2); this.Controls.Add(this.label2); this.Controls.Add(this.textBox1); this.Controls.Add(this.label1); // 控件基础配置 this.Name UCLogin; this.Size new System.Drawing.Size(585, 359); this.ResumeLayout(false); this.PerformLayout(); } } }五、核心特性效果总结特性核心作用设计器运行影响Browsable控制属性面板是否显示该属性无Category属性自定义分组归类无Description属性底部描述提示无DefaultValue控制属性字体加粗/正常样式不自动赋值仅标记DesignerCategory禁用可视化设计器标记纯代码类无Obsolete标记属性过时弹出警告可正常运行仅提示六、手写自定义控件核心流程新建类继承UserControl添加[DesignerCategory(Code)]禁用设计器手动声明所有内部控件Label/TextBox/Button自定义 InitializeComponent 方法设置控件坐标、大小、文本Controls.Add() 将子控件加入容器配置整体控件尺寸、布局七、易错点汇总DefaultValue不会初始化默认值仅修改设计器样式新手极易误解所有设计器特性只在VS编辑界面生效运行无任何逻辑影响手写控件必须手动 Add 子控件否则界面空白不显示未加 DesignerCategory 会默认打开可视化设计器导致代码冲突Browsablefalse 只是隐藏属性代码依然可以正常读写八、背诵口诀Browsable显隐藏Category分好帮Description写说明Default控粗样Designer纯代码手写控件最自强特性只改设计面运行逻辑不影响。
WinForm 自定义控件常用特性详解(Browsable/Category/Description/DefaultValue/DesignerCategory)
一、整体概述在 WinFormUserControl 自定义控件开发中可以通过一系列设计器特性控制属性在 VS 属性面板的展示样式、分类、默认值、提示信息同时可以手动手写布局控件脱离可视化设计器实现纯代码自定义控件。所有特性仅对VS设计器生效不影响程序运行逻辑。二、五大核心控件特性重点必考1. [Browsable(bool)] 可见性特性作用控制属性是否在 VS 右侧【属性面板】显示Browsable(true)默认值属性公开展示Browsable(false)属性隐藏属性面板看不到仅代码可用2. [Category(分组名)] 分类特性作用将自定义属性归类到指定分组整理属性面板界面案例[Category(佛得角)]、[Category(阿根廷)]自定义名称随意分组仅用于设计器展示无运行影响3. [Description(描述信息)] 备注特性作用鼠标选中属性时在VS底部展示属性功能说明用于提示使用者当前属性的作用提升控件易用性4. [DefaultValue(默认值)] 默认值特性核心视觉效果最特殊属性值 默认值 → 字体正常显示属性值 ≠ 默认值 → 字体加粗标识为已修改属性注意该特性不会自动赋值仅做设计器标记真正默认值需在代码/构造函数赋值。5. [DesignerCategory(Code)] 设计器特性作用标记当前类为纯代码类告诉VS此类没有可视化设计界面禁止打开拖拽设计窗口多用于手写布局的自定义控件6. [Obsolete] 兼容特性可用于控件属性标记标识属性过时、不推荐使用设计器会提示警告。三、可视化自定义控件带设计器完整源码继承 UserControl、自带可视化界面属性绑定文本框搭配全套设计特性using System; using System.ComponentModel; using System.Windows.Forms; namespace _7_自定义控件常用的特性 { public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } /// summary /// 账号属性绑定文本框配置全套设计器特性 /// /summary [Browsable(true)] // 属性面板可见 [Category(佛得角)] // 自定义分组 [Description(账号的内容)] // 属性描述说明 [DefaultValue(佛得角)] // 默认标记值控制加粗样式 public string Account { get { return textBox1.Text; } set { textBox1.Text value; } } /// summary /// 密码属性标记过时 /// /summary [Description(密码)] [Category(阿根廷)] [DefaultValue(123)] [Obsolete(不建议使用此属性)] public string Password { get { return textBox2.Text; } set { textBox2.Text value; } } } }四、纯手写自定义控件无设计器完整源码不使用可视化拖拽纯代码创建所有控件、布局搭配 DesignerCategory 特性using System.Windows.Forms; namespace _7_自定义控件常用的特性 { // 标记为纯代码类禁止打开设计器 [DesignerCategory(Code)] internal class UserLoin : UserControl { // 手动声明所有子控件 private Label label1; private TextBox textBox1; private Label label2; private TextBox textBox2; private Button button1; public UserLoin() { InitializeComponent(); } // 纯代码初始化所有控件、位置、样式、布局 private void InitializeComponent() { this.label1 new System.Windows.Forms.Label(); this.textBox1 new System.Windows.Forms.TextBox(); this.label2 new System.Windows.Forms.Label(); this.textBox2 new System.Windows.Forms.TextBox(); this.button1 new System.Windows.Forms.Button(); this.SuspendLayout(); // label1 账号标签 this.label1.AutoSize true; this.label1.Location new System.Drawing.Point(97, 51); this.label1.Name label1; this.label1.Size new System.Drawing.Size(70, 24); this.label1.TabIndex 0; this.label1.Text 账号:; // textBox1 账号输入框 this.textBox1.Location new System.Drawing.Point(207, 51); this.textBox1.Name textBox1; this.textBox1.Size new System.Drawing.Size(244, 35); this.textBox1.TabIndex 1; // label2 密码标签 this.label2.AutoSize true; this.label2.Location new System.Drawing.Point(97, 128); this.label2.Name label2; this.label2.Size new System.Drawing.Size(70, 24); this.label2.TabIndex 0; this.label2.Text 密码:; // textBox2 密码输入框 this.textBox2.Location new System.Drawing.Point(207, 125); this.textBox2.Name textBox2; this.textBox2.Size new System.Drawing.Size(244, 35); this.textBox2.TabIndex 1; // button1 登录按钮 this.button1.Location new System.Drawing.Point(207, 240); this.button1.Name button1; this.button1.Size new System.Drawing.Size(131, 52); this.button1.TabIndex 2; this.button1.Text 登录; this.button1.UseVisualStyleBackColor true; // 将所有控件添加到自定义控件容器 this.Controls.Add(this.button1); this.Controls.Add(this.textBox2); this.Controls.Add(this.label2); this.Controls.Add(this.textBox1); this.Controls.Add(this.label1); // 控件基础配置 this.Name UCLogin; this.Size new System.Drawing.Size(585, 359); this.ResumeLayout(false); this.PerformLayout(); } } }五、核心特性效果总结特性核心作用设计器运行影响Browsable控制属性面板是否显示该属性无Category属性自定义分组归类无Description属性底部描述提示无DefaultValue控制属性字体加粗/正常样式不自动赋值仅标记DesignerCategory禁用可视化设计器标记纯代码类无Obsolete标记属性过时弹出警告可正常运行仅提示六、手写自定义控件核心流程新建类继承UserControl添加[DesignerCategory(Code)]禁用设计器手动声明所有内部控件Label/TextBox/Button自定义 InitializeComponent 方法设置控件坐标、大小、文本Controls.Add() 将子控件加入容器配置整体控件尺寸、布局七、易错点汇总DefaultValue不会初始化默认值仅修改设计器样式新手极易误解所有设计器特性只在VS编辑界面生效运行无任何逻辑影响手写控件必须手动 Add 子控件否则界面空白不显示未加 DesignerCategory 会默认打开可视化设计器导致代码冲突Browsablefalse 只是隐藏属性代码依然可以正常读写八、背诵口诀Browsable显隐藏Category分好帮Description写说明Default控粗样Designer纯代码手写控件最自强特性只改设计面运行逻辑不影响。