如何让一个winform自带的控件拥有和devexpress一样的皮肤功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让一个winform自带的控件拥有和devexpress一样的皮肤功能相关的知识,希望对你有一定的参考价值。

参考技术A 这个需要通过继承控件,然后定义一组皮肤属性,然后在paint或是winproc中自己画

如何将设计器支持添加到 Winforms 扩展控件?

【中文标题】如何将设计器支持添加到 Winforms 扩展控件?【英文标题】:How to add designer support to Winforms extension control? 【发布时间】:2022-01-18 18:43:56 【问题描述】:

我正在使用 C# 和 .Net 5.0 框架创建一个 Windows 窗体应用程序,并且想创建一个按钮控件的扩展类,我可以将其用作菜单控件,也就是说,单击其中一个按钮将打开相应的页面(“页面”是我为 UserControls 实现的自定义界面,而不是让我的应用程序的每个部分都成为单独的表单)。

但是,在创建了扩展 Button 类的 MenuBtn 类之后,尝试将 MenuBtn 从我的 VS 2019 工具箱拖动到设计器视图时出现很长的错误。 似乎我需要为我的 MenuBtn 类添加某种设计时支持,但我不知道该怎么做。我知道我可以以编程方式使用该类,但我想成为能够在设计器中使用控件。

我知道我可以在按钮周围创建一个 UserControl 包装器并改用它,但是因为按钮已经具有我想要的几乎所有功能,所以这样做似乎是糟糕的设计。此外,我将其创建为一种框架,以便我将来制作的应用程序可以使用这些菜单按钮。这就是为什么我不只是为打开特定页面的每个按钮创建自定义 OnClick 事件处理程序。

下面是我的 MenuBtn 类的 sn-p,它现在非常简单,以及我在尝试将 MenuBtn 从工具箱放入设计窗口时收到的错误图片的链接(我无法复制和从错误窗口粘贴,这是一个很长的错误)。从代码 sn-p 中可以看出,我尝试在类中添加设计器标签。

    [Designer(typeof(ControlDesigner))]
    public partial class MenuBtn : Button
    
        public MenuBtn()
        
            InitializeComponent();
        
    

设计器错误消息: link

【问题讨论】:

也许这可以帮助你。 ***.com/questions/4186953/… 我之前确实遇到过这个问题,问题是我不需要任何自定义设计器功能,标准按钮功能很好,我只是无法从我的工具箱中放置它。我确实尝试了该解决方案,但没有任何区别 【参考方案1】:

我不确定到底是什么问题,我仍然有点困惑,但我能够通过清理和重建解决方案的某种组合来解决问题,并将构建目标 CPU 从 Any cpu 更改为x86,然后再返回。

我想问题不是我需要添加某种设计器支持,而是工具箱/设计器从我的项目的 dll 中读取的问题。

【讨论】:

以上是关于如何让一个winform自带的控件拥有和devexpress一样的皮肤功能的主要内容,如果未能解决你的问题,请参考以下文章

DevExpress Winforms Controls:安装使用系统要求文档

如何让c#winform 根据datagridview数据筛选 filter

Winform中如何让控件置顶

winform中如何让控件随窗口按比例缩放

winform中自带的pageSetupDialog和printDocument控件

c# winform groupbox上动态生成的控件,如何让控件随着分辨率变化而自动调整位置和大小