You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DLL引用为Windows Form添加带自定义属性的C#控件

创建带自定义属性的WinForms控件DLL完整指南

一、选择正确的项目类型

在Visual Studio中,直接创建Windows Forms Control Library项目(针对.NET Framework);如果用.NET 5/6+,选Class Library,之后手动安装Microsoft.WindowsDesktop.App.WindowsForms NuGet包,引入WinForms依赖。

二、实现自定义控件(以RoundedButton为例)

  1. 删除项目默认的UserControl1.cs,右键项目→添加→类,命名为RoundedButton,让它继承自原生Button。
  2. 编写代码添加自定义属性并重绘控件:
using System.Drawing;
using System.Windows.Forms;

namespace CustomWinFormsControls
{
    public class RoundedButton : Button
    {
        // 自定义字段
        private bool _lightUpOnHover = true;
        private Color _lightUpColor = Color.LightBlue;
        private int _rounded = 10;

        // 自定义属性,带分类和描述(属性面板可见)
        [Category("Custom Settings")]
        [Description("开启/关闭鼠标悬停高亮效果")]
        public bool LightUpOnHover
        {
            get => _lightUpOnHover;
            set
            {
                _lightUpOnHover = value;
                Invalidate(); // 修改后触发重绘
            }
        }

        [Category("Custom Settings")]
        [Description("悬停时的高亮颜色")]
        public Color LightUpColor
        {
            get => _lightUpColor;
            set
            {
                _lightUpColor = value;
                Invalidate();
            }
        }

        [Category("Custom Settings")]
        [Description("圆角半径(单位:像素)")]
        public int Rounded
        {
            get => _rounded;
            set
            {
                _rounded = value > 0 ? value : 0;
                Invalidate();
            }
        }

        // 重写OnPaint实现圆角和高亮逻辑
        protected override void OnPaint(PaintEventArgs pevent)
        {
            var g = pevent.Graphics;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            // 根据状态确定背景色
            var bgColor = BackColor;
            if (LightUpOnHover && ClientRectangle.Contains(PointToClient(MousePosition)))
            {
                bgColor = LightUpColor;
            }

            // 绘制圆角背景
            using (var brush = new SolidBrush(bgColor))
            using (var path = new System.Drawing.Drawing2D.GraphicsPath())
            {
                path.AddArc(0, 0, Rounded, Rounded, 180, 90);
                path.AddArc(Width - Rounded, 0, Rounded, Rounded, 270, 90);
                path.AddArc(Width - Rounded, Height - Rounded, Rounded, Rounded, 0, 90);
                path.AddArc(0, Height - Rounded, Rounded, Rounded, 90, 90);
                path.CloseAllFigures();

                g.FillPath(brush, path);
            }

            // 绘制按钮文字
            TextRenderer.DrawText(g, Text, Font, ClientRectangle, ForeColor,
                TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
        }

        // 鼠标移动/离开时触发重绘,更新高亮状态
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            if (LightUpOnHover) Invalidate();
        }

        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);
            if (LightUpOnHover) Invalidate();
        }
    }
}

三、编译生成DLL

右键项目→生成(或重新生成),在项目的bin/Debug或bin/Release目录下就能拿到编译好的.dll文件。

四、在WinForms项目中使用自定义控件

  1. 打开目标WinForms项目,右键工具箱→选择项→浏览,找到刚才生成的DLL,选中后确认,自定义控件会自动出现在工具箱里。
  2. 像拖拽原生控件一样把RoundedButton拖到窗体上,在属性面板的Custom Settings分类下就能看到你定义的LightUpOnHover、LightUpColor、Rounded属性,直接修改即可生效。

五、扩展到其他控件(如复选框)

和按钮逻辑一致:创建RoundedCheckBox类继承自CheckBox,添加相同的自定义属性,重写OnPaint方法实现圆角和高亮效果,核心绘制逻辑可参考按钮的实现。

注意事项

  • 自定义属性需添加[Category]和[Description]特性,这样在属性面板里会分类显示并附带说明,提升易用性。
  • 修改属性后必须调用Invalidate()触发控件重绘,确保界面实时更新。
  • 若使用.NET 6+的Class Library项目,务必先安装Microsoft.WindowsDesktop.App.WindowsForms NuGet包,否则无法引用WinForms相关类。

内容的提问来源于stack exchange,提问作者eclipz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:08:16