将字体大小传递给 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
,在 ToolTip
的 Draw
事件中设置所需的字体,然后在 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);
}
}
}
}
问题:我有一个 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
,在 ToolTip
的 Draw
事件中设置所需的字体,然后在 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);
}
}
}
}