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

自定义GlowButton控件文本显示异常及点击消失问题求助

修复GlowButton控件的文本显示问题

问题根源分析

  1. 所有按钮显示相同文本:大概率是ButtonText被定义为静态字段,导致所有控件实例共享同一个值;或者DrawButtonText方法没有判断当前实例的文本是否为空,直接绘制了固定内容。
  2. 点击后文本消失:点击触发控件重绘时,OnPaint事件中没有正确读取当前实例的ButtonText属性,或者点击逻辑意外清空了文本值。

具体修复步骤

1. 确保ButtonText是实例属性(非静态)

检查GlowButton控件代码,ButtonText必须是实例级别的属性,每个控件实例独立持有自己的文本值:

public class GlowButton : UserControl
{
    // 不要加static!每个实例有自己的文本存储字段
    private string _buttonText = string.Empty;

    [Category("Appearance")]
    public string ButtonText
    {
        get => _buttonText;
        set
        {
            _buttonText = value;
            Invalidate(); // 属性变更时触发重绘,更新显示
        }
    }

    // 其他控件逻辑代码...
}

2. 绘制文本前判断是否为空

修改DrawButtonText方法,只有当ButtonText不为空或空白时才执行绘制:

private void DrawButtonText(Graphics g)
{
    if (string.IsNullOrWhiteSpace(ButtonText))
        return; // 文本为空时直接返回,不绘制

    // 你的文本绘制逻辑示例:
    var textSize = g.MeasureString(ButtonText, Font);
    var textPos = new PointF(
        (Width - textSize.Width) / 2,
        (Height - textSize.Height) / 2
    );
    g.DrawString(ButtonText, Font, Brushes.Black, textPos);
}

3. 修复点击后文本消失问题

确保OnPaint事件中始终调用DrawButtonText,且点击逻辑不会修改ButtonText值:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    DrawButton(e.Graphics); // 绘制按钮外观
    DrawButtonText(e.Graphics); // 始终尝试绘制文本(空文本会跳过)
}

// 点击事件处理示例,避免清空文本
protected override void OnClick(EventArgs e)
{
    base.OnClick(e);
    // 你的点击逻辑(比如切换按钮高亮状态)
    Invalidate(); // 触发重绘更新外观,文本会保留原有值
}

4. 窗体中设置文本的正确方式

仅给需要显示文本的控件实例赋值,其余实例不设置ButtonText即可:

public partial class YourForm : Form
{
    public YourForm()
    {
        InitializeComponent();
        glowButton1.ButtonText = "REC"; // 仅该按钮显示文本
        // 其他GlowButton实例不设置ButtonText,自然无文本显示
    }
}

验证效果

  • 未设置ButtonText的按钮不会显示任何文本
  • 设置了ButtonText的按钮始终显示指定文本,点击后不会消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:22:06