将字体大小传递给 Winform C# 项目中的用户控制工具提示

passing font size to user control tool tip in Winform C# project

问题:我有一个 Winform C# 项目,它在从宿主项目传递时更改了用户控件工具提示的工具提示文本。我需要将字体大小作为变量传递,但不知道在哪里进行更改。我在网上尝试了很多解决方案,但一直坚持使用这个实现。非常感谢这方面的任何帮助。

我目前有:

我有一个 C# 用户控件项目,我在其中设置了一个 属性 来将工具提示文本更改为我的 UC_ToolTipButton 项目中用户指定的值,其中项目的内容是如下:

UC_ToolTipButton.cs

using System.Windows.Forms;

namespace UC_ToolTipButton
{
    public partial class UC_ToolTipButton : UserControl
    {
        public string TT_Message
        {
            get{
                return ToolTip_Message.GetToolTip(btnTT);
            }
            set{
                ToolTip_Message.SetToolTip(btnTT, value);
            }
        }
        public UC_ToolTipButton()
        {
            InitializeComponent();
        }
    }
}

在我的设计器文件中,我放置了一个按钮 (btnTT),并在上面放置了工具提示 (ToolTip_Message)。

当我编译这个 User Control Forms 项目时,它工作正常并创建了一个 dll 文件。

在项目 TryButtonTooltip 中导入此文件后,我的文件 TryTooltipForm.cs 具有以下内容

using System.Windows.Forms;

namespace TryButtonToolTip
{
    public partial class TryToolTipForm : Form
    {
        public TryToolTipForm()
        {
            InitializeComponent();
            uC_TTMessage.TT_Message = @"Hi";
        }
    }
}

ToolTip 上的 OwnerDraw 设置为 true,在 ToolTipDraw 事件中设置所需的字体,然后在 Popup事件测量并设置 ToolTip 的大小,如示例 here.

中所述

例如像这样(未经测试):

public partial class UC_ToolTipButton : UserControl
{
    public string TT_FontFamily { get; set; }
    public float TT_FontSize { get; set; }

    public string TT_Message
    {
        get
        {
            return ToolTip_Message.GetToolTip(btnTT);
        }
        set
        {
            ToolTip_Message.SetToolTip(btnTT, value);
        }
    }
    public UC_ToolTipButton()
    {
        InitializeComponent();
        TT_FontFamily = "Tahoma";
        TT_FontSize = 10;
        ToolTip_Message.OwnerDraw = true;
        ToolTip_Message.Draw += new DrawToolTipEventHandler(TT_Draw);
        ToolTip_Message.Popup += new PopupEventHandler(TT_Popup);
    }

    private void TT_Popup(object sender, PopupEventArgs e)
    {
        using (Font f = new Font(TT_FontFamily, TT_FontSize))
        {
            e.ToolTipSize = TextRenderer.MeasureText(ToolTip_Message.GetToolTip(e.AssociatedControl), f);
        }
    }
    private void TT_Draw(System.Object sender,
        System.Windows.Forms.DrawToolTipEventArgs e)
    {
            e.DrawBackground();
            e.DrawBorder();
            using (StringFormat sf = new StringFormat())
            {
                sf.Alignment = StringAlignment.Center;
                sf.LineAlignment = StringAlignment.Center;

                using (Font f = new Font(TT_FontFamily, TT_FontSize))
                {
                    e.Graphics.DrawString(e.ToolTipText, f, SystemBrushes.ActiveCaptionText, e.Bounds, sf);
                }
            }

    }
}