如何自定义像这样的按钮控件?

2023-12-06

我想制作一个像这样的自定义按钮控件(图像按钮可以)。

我是新用户,所以不能在这里发布图片。所以我上传了图片here

在尝试了一些教程后我现在有点绝望

任何建议都将受到高度赞赏。

Thanks

更新于 08/10/2019:我很多年前就问过这个问题,当时我没有上传图片的权限,所以我上传到第三方网站的图片现在早就没有了。我收到了很多关于重新上传图像的请求,所以这是我八年前做的那个项目的记忆,我只是找到了一些与我的记忆相匹配的关于窗口窗体的随机图像

This is when the button is in normal state This is when the button is in normal state

This is when the button is hovered or clicked, with the rounded border This is when the button is hovered or clicked, with the rounded border


您可以创建一个继承自 Button 的类,以将所有样式保留在一个位置。要执行悬停和按下状态,您可以覆盖按钮的鼠标输入/离开事件并更改样式。

这是我们的一个项目的示例(我更改了颜色,但您明白了)。在我们更改一些颜色的地方,您可以切换图像。

public class MossieButton : Button
{
    private static Font _normalFont = new Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

    private static Color _back = System.Drawing.Color.Grey;
    private static Color _border = System.Drawing.Color.Black;
    private static Color _activeBorder = System.Drawing.Color.Red;
    private static Color _fore = System.Drawing.Color.White;

    private static Padding _margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
    private static Padding _padding = new System.Windows.Forms.Padding(3, 3, 3, 3);

    private static Size _minSize = new System.Drawing.Size(100, 30);

    private bool _active;

    public MossieButton()
        : base()
    {
        base.Font = _normalFont;
        base.BackColor = _border;
        base.ForeColor = _fore;
        base.FlatAppearance.BorderColor = _back;
        base.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        base.Margin = _margin;
        base.Padding = _padding;
        base.MinimumSize = _minSize;
    }

    protected override void OnControlAdded(ControlEventArgs e)
    {
        base.OnControlAdded(e);
        UseVisualStyleBackColor = false;
    }

    protected override void OnMouseEnter(System.EventArgs e)
    {
        base.OnMouseEnter(e);
        if (!_active)
            base.FlatAppearance.BorderColor = _activeBorder;
    }

    protected override void OnMouseLeave(System.EventArgs e)
    {
        base.OnMouseLeave(e);
        if (!_active)
            base.FlatAppearance.BorderColor = _border;
    }

    public void SetStateActive()
    {
        _active = true;
        base.FlatAppearance.BorderColor = _activeBorder;
    }

    public void SetStateNormal()
    {
        _active = false;
        base.FlatAppearance.BorderColor = _border;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何自定义像这样的按钮控件? 的相关文章

随机推荐

  • 数组的最小总和分区

    问题陈述 给定一个数组 任务是将其分为两个集合 S1 和 S2 使得它们的总和之间的绝对差最小 输入样本 1 6 5 11 gt 1 这 2 个子集是 1 5 6 and 11 总和是12 and 11 因此答案是1 36 7 46 40
  • 在高图表的最后一点上动态绘制标记

    我想在最后一点上画一个标记 数据源是动态的 看看下面的代码 function btn click function var l chart series 0 points length var p chart series 0 points
  • XSLT 1.0 如何使用 sum() 对带有逗号的值求和 - 在 xpath 中行走

    我有一个 XSLT 1 0 转换要编写 但我没有在网上找到适合我的问题的良好解决方案 我有以下 XML 示例
  • 如何将参数从 JQuery 传递到 ASP.NET webmethod?

    我在下面编写了这个 jQuery ajax 方法 它调用 webmethod 除了作为 User 对象的参数具有空字段之外 调用发生得很好 当我调试时 我可以看到 firebug 中的值 但它们无法访问 webmethod 中的 User
  • C# 在其他线程上执行代码

    我的应用程序中的线程处理遇到一些问题 我有一个多线程客户端 服务器应用程序 我还使用 C MonoDevelop for Unity3d 不确定这对答案是否有任何影响 我将尝试解释我的问题出在哪里 Unity 在单线程上工作 所以如果我想实
  • 使用 NLTK 提取名词和动词

    我有 Django Rest 应用程序和一个模型任务 我对自然处理完全陌生 我想构建一个返回名词和动词列表的函数 它看起来像这样 api view GET def noun verb list request nouns verbs Lis
  • Groovy:Lombok @NoArgsConstructor 未创建默认构造函数

    我在用lombok 1 18 6在我的春季启动项目中 我有 NoArgsConstructor但仍然得到org springframework orm jpa JpaSystemException No default constructo
  • Android - Firestore/Firebase 实时数据库“.info/connected”返回错误的连接状态

    我在应用程序中使用 Firestore Beta 我想检查是否存在与 Firestore 数据库的有效在线连接 文档称 目前没有直接的方法来查询连接状态 但可以使用 Firebase 连接状态作为解决方法 代码片段也可以在文档的这一部分中找
  • AS/400:使用COMPUTE功能,不同字段定义结果不一致

    我在使用 AS 400 中的 COMPUTE 函数时遇到了一个神秘的问题 场景如下 01 WSAA AMOUNT A PIC S9 15 V9 02 COMP 3 01 WSAA AMOUNT B 01 PIC S9 16 V9 02 VA
  • 在 C++ 中创建文件夹

    我最近开始使用 C 工作 当我在执行代码时必须创建目录时遇到了这种情况 当我必须创建一个文件夹时 代码工作正常 但当我必须使用这个新创建的文件夹创建另一个文件夹时 代码会失败 假设 我在C 并想将我的文件存储在C A B 下面的代码使用mk
  • 使用 ncu (NsightComputeCli) 获取 nvprof 默认行为

    默认nvprof输出很棒 但是nvprof已被弃用 取而代之的是ncu 我怎样才能使ncu给我一个看起来更像的输出nvprof 最小工作示例 我有2个range以一种非常不理想的方式调用的函数 仅使用 1 个线程 比其他的需要更长的时间ra
  • 性能:子查询或连接

    我有一个关于子查询 连接另一个表的性能的小问题 INSERT INTO Original Person PID Name Surname SID SELECT ma PID new TBL Name ma Surname TBL SID F
  • 如何执行多个相继完成的 Alamofire 请求?

    我想执行多个 Alamofire 请求 但是 由于数据依赖性 新请求只能在前一个请求完成后才开始 我已经问过一个question一个更一般的异步请求示例 通过以下方法解决OperationQueue 然而 我并没有成功地用 Alamofir
  • fork()的执行顺序可以确定吗?

    我正在做教科书 操作系统概念第七版 的练习 我有点困惑如何fork 工作 据我了解 fork 创建一个与其父进程同时运行的子进程 但是 我们如何确切地知道哪个进程首先运行呢 我的意思是执行顺序 Problem使用以下命令编写 C 程序for
  • R CMD BATCH 或 Rscript 错误停止

    我不认为R CMD BATCH or Rscript应该在错误时停止 但我希望它停止 或类似的东西 作为一个例子 我有这个test R stop I really mean stop cat no I dont want this prin
  • 为 nth-child 和 nth-of-type 指定任意子级(无模式)列表

    所以我现在已经读了足够多的关于各种时髦的内容nth child and nth of type模式让第七个儿子的第七个儿子驾驶一艘宇宙飞船往返于冥王星 但我仍然没有找到一种方法来简单地以简洁的方式提供特定儿童的列表 它会像这样工作 td n
  • 判断SQLite数据库是否被锁定

    我读过关于如何检测 SQLite 数据库是否被锁定的其他答案 它建议使用sqlite3 busy handler sqlite3 busy timeout 我使用的是 Qt 它支持 SQLite 数据库 但这在这里并不重要 因为在我的应用程
  • MySQL注入查询

    我熟悉准备好的语句 并且我知道它们是防止 MySQL 注入的最佳实践 但我想知道这个 PHP MySQL 语句如何面临注入攻击的风险 result mysqli query db SELECT name FROM users WHERE i
  • Flash AS3 尝试获取外部 swf 时出现安全沙箱冲突

    嗨 我正在尝试从不同的服务器将 swf 文件加载到我的 Flash 应用程序 当我尝试将其加载到 flash IDE crl enter 上时 一切工作正常 但是当我将 swf 作为独立的 swf 文件运行或通过调试它时 我收到此错误 Se
  • 如何自定义像这样的按钮控件?

    我想制作一个像这样的自定义按钮控件 图像按钮可以 我是新用户 所以不能在这里发布图片 所以我上传了图片here 在尝试了一些教程后我现在有点绝望 任何建议都将受到高度赞赏 Thanks 更新于 08 10 2019 我很多年前就问过这个问题