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

如何获取设计器中已分配ToolTip的按钮的提示文本?

获取WinForms按钮的ToolTip文本(用于多语言翻译)

你遇到的这个问题其实是WinForms ToolTip机制的特性导致的——设计器里显示的“ToolTip on [ToolTip控件名]”只是设计时的虚拟属性,运行时这个文本并不是存储在按钮自身的属性里,而是由对应的ToolTip控件统一管理的。所以直接通过按钮的GetType().GetProperties()自然拿不到它。

下面给你几种可行的解决方案,按推荐程度排序:

1. 直接使用ToolTip控件的GetToolTip方法(最推荐)

这是官方提供的标准方法,简单可靠。只要你能访问到窗体上的ToolTip控件实例,直接传入目标按钮就能获取对应的提示文本:

// 假设你的ToolTip控件名为myToolTip
string buttonTooltip = myToolTip.GetToolTip(myButton);

如果要批量获取所有带ToolTip的控件,你可以遍历窗体上的所有控件,然后逐个调用这个方法:

List<(Control Control, string TooltipText)> allTooltips = new List<(Control, string)>();
foreach (Control ctrl in this.Controls)
{
    string tip = myToolTip.GetToolTip(ctrl);
    if (!string.IsNullOrEmpty(tip))
    {
        allTooltips.Add((ctrl, tip));
    }
}

2. 通过反射访问ToolTip内部的关联集合(适合无法直接访问ToolTip实例的场景)

如果因为某种原因你无法直接引用ToolTip控件(比如封装在类库中),可以通过反射获取ToolTip内部维护的控件-文本映射集合。WinForms的ToolTip类内部有一个私有字段toolTipInfos(.NET Framework)或者类似的存储结构,你可以这样获取:

// 假设你已经拿到了ToolTip实例tooltipCtrl
var toolTipInfosField = tooltipCtrl.GetType().GetField("toolTipInfos", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var toolTipInfos = toolTipInfosField.GetValue(tooltipCtrl) as IEnumerable;

foreach (var info in toolTipInfos)
{
    // 获取关联的控件
    var controlProperty = info.GetType().GetProperty("Control");
    Control ctrl = controlProperty.GetValue(info) as Control;
    // 获取ToolTip文本
    var textProperty = info.GetType().GetProperty("ToolTipText");
    string tipText = textProperty.GetValue(info) as string;
    
    if (ctrl != null && !string.IsNullOrEmpty(tipText))
    {
        // 处理你的多语言逻辑
        Console.WriteLine($"控件{ctrl.Name}的ToolTip:{tipText}");
    }
}

注意:这种方法依赖于.NET框架的内部实现,不同版本(比如.NET Core/.NET 5+)可能字段名不同,需要根据实际情况调整。

3. 设计时提取(适合提前收集翻译文本)

如果你的多语言翻译是在开发阶段提前收集,也可以直接解析窗体的.designer.cs文件,查找类似this.myToolTip.SetToolTip(this.myButton, "提示文本");的代码行,提取其中的文本内容。这种方式不需要运行时反射,更稳定。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:44