* UIToolTip:修复默认显示
This commit is contained in:
parent
70d662b557
commit
560a6f00f6
Binary file not shown.
Binary file not shown.
9
SunnyUI.Demo/Controls/FOther.Designer.cs
generated
9
SunnyUI.Demo/Controls/FOther.Designer.cs
generated
@ -44,6 +44,7 @@ namespace Sunny.UI.Demo
|
||||
//
|
||||
this.uiLabel3.AutoSize = true;
|
||||
this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||
this.uiLabel3.IsScaled = false;
|
||||
this.uiLabel3.Location = new System.Drawing.Point(31, 136);
|
||||
this.uiLabel3.Name = "uiLabel3";
|
||||
this.uiLabel3.Size = new System.Drawing.Size(138, 21);
|
||||
@ -55,6 +56,7 @@ namespace Sunny.UI.Demo
|
||||
//
|
||||
this.uiLabel2.AutoSize = true;
|
||||
this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||
this.uiLabel2.IsScaled = false;
|
||||
this.uiLabel2.Location = new System.Drawing.Point(211, 95);
|
||||
this.uiLabel2.Name = "uiLabel2";
|
||||
this.uiLabel2.Size = new System.Drawing.Size(138, 21);
|
||||
@ -66,16 +68,19 @@ namespace Sunny.UI.Demo
|
||||
//
|
||||
this.uiLabel1.AutoSize = true;
|
||||
this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||
this.uiLabel1.IsScaled = false;
|
||||
this.uiLabel1.Location = new System.Drawing.Point(31, 95);
|
||||
this.uiLabel1.Name = "uiLabel1";
|
||||
this.uiLabel1.Size = new System.Drawing.Size(138, 21);
|
||||
this.uiLabel1.TabIndex = 77;
|
||||
this.uiLabel1.Text = "鼠标移过来看提示";
|
||||
this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.uiToolTip1.SetToolTip(this.uiLabel1, "赠人玫瑰手有余香");
|
||||
//
|
||||
// uiLine7
|
||||
//
|
||||
this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||
this.uiLine7.IsScaled = false;
|
||||
this.uiLine7.Location = new System.Drawing.Point(30, 55);
|
||||
this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16);
|
||||
this.uiLine7.Name = "uiLine7";
|
||||
@ -90,6 +95,7 @@ namespace Sunny.UI.Demo
|
||||
this.uiScrollingText2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.uiScrollingText2.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||
this.uiScrollingText2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
this.uiScrollingText2.IsScaled = false;
|
||||
this.uiScrollingText2.Location = new System.Drawing.Point(381, 129);
|
||||
this.uiScrollingText2.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.uiScrollingText2.Name = "uiScrollingText2";
|
||||
@ -103,6 +109,7 @@ namespace Sunny.UI.Demo
|
||||
this.uiScrollingText1.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||
this.uiScrollingText1.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||
this.uiScrollingText1.ForeColor = System.Drawing.Color.Red;
|
||||
this.uiScrollingText1.IsScaled = false;
|
||||
this.uiScrollingText1.Location = new System.Drawing.Point(381, 88);
|
||||
this.uiScrollingText1.MinimumSize = new System.Drawing.Size(1, 1);
|
||||
this.uiScrollingText1.Name = "uiScrollingText1";
|
||||
@ -116,6 +123,7 @@ namespace Sunny.UI.Demo
|
||||
// uiLine6
|
||||
//
|
||||
this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||
this.uiLine6.IsScaled = false;
|
||||
this.uiLine6.Location = new System.Drawing.Point(381, 55);
|
||||
this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16);
|
||||
this.uiLine6.Name = "uiLine6";
|
||||
@ -130,6 +138,7 @@ namespace Sunny.UI.Demo
|
||||
this.uiToolTip1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||
this.uiToolTip1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(239)))), ((int)(((byte)(239)))));
|
||||
this.uiToolTip1.OwnerDraw = true;
|
||||
this.uiToolTip1.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
|
||||
//
|
||||
// FOther
|
||||
//
|
||||
|
@ -19,6 +19,7 @@
|
||||
* 2020-07-21: V2.2.6 增加控件
|
||||
* 2020-07-25: V2.2.6 更新绘制
|
||||
* 2021-08-16: V3.0.6 增加ToolTip接口,解决类似UITextBox这类的组合控件无法显示ToolTip的问题
|
||||
* 2021-12-09: V3.0.9 修复默认显示
|
||||
******************************************************************************/
|
||||
|
||||
using System;
|
||||
@ -48,8 +49,12 @@ namespace Sunny.UI
|
||||
InitOwnerDraw();
|
||||
}
|
||||
|
||||
[DefaultValue("ToolTip title"), Category("SunnyUI"), Description("标题")]
|
||||
public new string ToolTipTitle { get; set; } = "ToolTip title";
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
base.Dispose(disposing);
|
||||
TempTitleFont?.Dispose();
|
||||
TempFont?.Dispose();
|
||||
}
|
||||
|
||||
[DefaultValue(typeof(Font), "微软雅黑, 9pt"), Description("字体"), Category("SunnyUI")]
|
||||
public Font Font { get; set; } = new Font("微软雅黑", 9);
|
||||
@ -66,7 +71,7 @@ namespace Sunny.UI
|
||||
[DefaultValue(typeof(Size), "100, 70"), Description("不自动缩放时大小"), Category("SunnyUI")]
|
||||
public Size Size { get; set; } = new Size(100, 70);
|
||||
|
||||
public void SetToolTip(Control control, string description, string title, int symbol, int symbolSize,
|
||||
public void SetToolTip(Control control, string caption, string title, int symbol, int symbolSize,
|
||||
Color symbolColor)
|
||||
{
|
||||
if (title == null) title = string.Empty;
|
||||
@ -74,7 +79,7 @@ namespace Sunny.UI
|
||||
if (ToolTipControls.ContainsKey(control))
|
||||
{
|
||||
ToolTipControls[control].Title = title;
|
||||
ToolTipControls[control].Description = description;
|
||||
ToolTipControls[control].ToolTipText = caption;
|
||||
ToolTipControls[control].Symbol = symbol;
|
||||
ToolTipControls[control].SymbolSize = symbolSize;
|
||||
ToolTipControls[control].SymbolColor = symbolColor;
|
||||
@ -85,7 +90,7 @@ namespace Sunny.UI
|
||||
{
|
||||
Control = control,
|
||||
Title = title,
|
||||
Description = description,
|
||||
ToolTipText = caption,
|
||||
Symbol = symbol,
|
||||
SymbolSize = symbolSize,
|
||||
SymbolColor = symbolColor
|
||||
@ -96,20 +101,20 @@ namespace Sunny.UI
|
||||
|
||||
if (control is IToolTip toolTip)
|
||||
{
|
||||
SetToolTip(toolTip.ExToolTipControl(), description, title, symbol, symbolSize, symbolColor);
|
||||
SetToolTip(toolTip.ExToolTipControl(), caption, title, symbol, symbolSize, symbolColor);
|
||||
}
|
||||
|
||||
base.SetToolTip(control, description);
|
||||
base.SetToolTip(control, caption);
|
||||
}
|
||||
|
||||
public void SetToolTip(Control control, string description, string title)
|
||||
public void SetToolTip(Control control, string caption, string title)
|
||||
{
|
||||
if (title == null) title = string.Empty;
|
||||
|
||||
if (ToolTipControls.ContainsKey(control))
|
||||
{
|
||||
ToolTipControls[control].Title = title;
|
||||
ToolTipControls[control].Description = description;
|
||||
ToolTipControls[control].ToolTipText = caption;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -117,7 +122,7 @@ namespace Sunny.UI
|
||||
{
|
||||
Control = control,
|
||||
Title = title,
|
||||
Description = description
|
||||
ToolTipText = caption
|
||||
};
|
||||
|
||||
ToolTipControls.TryAdd(control, ctrl);
|
||||
@ -125,37 +130,10 @@ namespace Sunny.UI
|
||||
|
||||
if (control is IToolTip toolTip)
|
||||
{
|
||||
SetToolTip(toolTip.ExToolTipControl(), description, title);
|
||||
SetToolTip(toolTip.ExToolTipControl(), caption, title);
|
||||
}
|
||||
|
||||
base.SetToolTip(control, description);
|
||||
}
|
||||
|
||||
public new void SetToolTip(Control control, string description)
|
||||
{
|
||||
if (ToolTipControls.ContainsKey(control))
|
||||
{
|
||||
ToolTipControls[control].Title = string.Empty;
|
||||
ToolTipControls[control].Description = description;
|
||||
}
|
||||
else
|
||||
{
|
||||
var ctrl = new ToolTipControl
|
||||
{
|
||||
Control = control,
|
||||
Title = string.Empty,
|
||||
Description = description
|
||||
};
|
||||
|
||||
ToolTipControls.TryAdd(control, ctrl);
|
||||
}
|
||||
|
||||
if (control is IToolTip toolTip)
|
||||
{
|
||||
SetToolTip(toolTip.ExToolTipControl(), description);
|
||||
}
|
||||
|
||||
base.SetToolTip(control, description);
|
||||
base.SetToolTip(control, caption);
|
||||
}
|
||||
|
||||
public void RemoveToolTip(Control control)
|
||||
@ -171,11 +149,6 @@ namespace Sunny.UI
|
||||
}
|
||||
}
|
||||
|
||||
public new string GetToolTip(Control control)
|
||||
{
|
||||
return ToolTipControls.ContainsKey(control) ? ToolTipControls[control].Description : "";
|
||||
}
|
||||
|
||||
private void InitOwnerDraw()
|
||||
{
|
||||
OwnerDraw = true;
|
||||
@ -193,7 +166,7 @@ namespace Sunny.UI
|
||||
{
|
||||
var tooltip = ToolTipControls[e.AssociatedControl];
|
||||
|
||||
if (tooltip.Description.IsValid())
|
||||
if (tooltip.ToolTipText.IsValid())
|
||||
{
|
||||
if (!AutoSize)
|
||||
{
|
||||
@ -204,16 +177,15 @@ namespace Sunny.UI
|
||||
var bmp = new Bitmap(e.ToolTipSize.Width, e.ToolTipSize.Height);
|
||||
var g = Graphics.FromImage(bmp);
|
||||
int symbolWidth = tooltip.Symbol > 0 ? tooltip.SymbolSize : 0;
|
||||
Font tmpTitleFont = TitleFont.DPIScaleFont();
|
||||
Font tmpFont = Font.DPIScaleFont();
|
||||
|
||||
|
||||
SizeF titleSize = new SizeF(0, 0);
|
||||
if (tooltip.Title.IsValid())
|
||||
{
|
||||
titleSize = g.MeasureString(tooltip.Title, tmpTitleFont);
|
||||
titleSize = g.MeasureString(tooltip.Title, TempTitleFont);
|
||||
}
|
||||
|
||||
SizeF textSize = g.MeasureString(tooltip.Description, tmpFont);
|
||||
SizeF textSize = g.MeasureString(tooltip.ToolTipText, TempTitleFont);
|
||||
int allWidth = (int)Math.Max(textSize.Width, titleSize.Width) + 10;
|
||||
if (symbolWidth > 0) allWidth = allWidth + symbolWidth + 5;
|
||||
int allHeight = titleSize.Height > 0 ?
|
||||
@ -221,27 +193,57 @@ namespace Sunny.UI
|
||||
(int)textSize.Height + 10;
|
||||
e.ToolTipSize = new Size(allWidth, allHeight);
|
||||
bmp.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SizeF sf = GDI.MeasureString(GetToolTip(e.AssociatedControl), TempTitleFont);
|
||||
e.ToolTipSize = new Size((int)sf.Width + 10, (int)sf.Height + 10);
|
||||
}
|
||||
}
|
||||
|
||||
tmpTitleFont.Dispose();
|
||||
tmpFont.Dispose();
|
||||
Font tmpFont;
|
||||
|
||||
private Font TempFont
|
||||
{
|
||||
get
|
||||
{
|
||||
if (tmpFont == null || !tmpFont.Size.EqualsFloat(Font.DPIScaleFontSize()))
|
||||
{
|
||||
tmpFont?.Dispose();
|
||||
tmpFont = Font.DPIScaleFont();
|
||||
}
|
||||
|
||||
return tmpFont;
|
||||
}
|
||||
}
|
||||
|
||||
Font tmpTitleFont;
|
||||
|
||||
private Font TempTitleFont
|
||||
{
|
||||
get
|
||||
{
|
||||
if (tmpTitleFont == null || !tmpTitleFont.Size.EqualsFloat(TitleFont.DPIScaleFontSize()))
|
||||
{
|
||||
tmpTitleFont?.Dispose();
|
||||
tmpTitleFont = TitleFont.DPIScaleFont();
|
||||
}
|
||||
|
||||
return tmpTitleFont;
|
||||
}
|
||||
}
|
||||
|
||||
private void ToolTipExDraw(object sender, DrawToolTipEventArgs e)
|
||||
{
|
||||
Font tmpTitleFont = TitleFont.DPIScaleFont();
|
||||
Font tmpFont = Font.DPIScaleFont();
|
||||
var bounds = new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width - 1, e.Bounds.Height - 1);
|
||||
e.Graphics.FillRectangle(BackColor, bounds);
|
||||
e.Graphics.DrawRectangle(RectColor, bounds);
|
||||
|
||||
if (ToolTipControls.ContainsKey(e.AssociatedControl))
|
||||
{
|
||||
var tooltip = ToolTipControls[e.AssociatedControl];
|
||||
var bounds = new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width - 1, e.Bounds.Height - 1);
|
||||
|
||||
e.Graphics.FillRectangle(BackColor, bounds);
|
||||
e.Graphics.DrawRectangle(RectColor, bounds);
|
||||
|
||||
if (tooltip.Symbol > 0)
|
||||
{
|
||||
e.Graphics.DrawFontImage(tooltip.Symbol, tooltip.SymbolSize, tooltip.SymbolColor, new Rectangle(5, 5, tooltip.SymbolSize, tooltip.SymbolSize));
|
||||
@ -253,10 +255,10 @@ namespace Sunny.UI
|
||||
{
|
||||
if (tooltip.Title.IsValid())
|
||||
{
|
||||
titleSize = e.Graphics.MeasureString(tooltip.Title, tmpTitleFont);
|
||||
titleSize = e.Graphics.MeasureString(tooltip.Title, TempTitleFont);
|
||||
}
|
||||
|
||||
e.Graphics.DrawString(tooltip.Title, tmpTitleFont, ForeColor,
|
||||
e.Graphics.DrawString(tooltip.Title, TempTitleFont, ForeColor,
|
||||
tooltip.Symbol > 0 ? tooltip.SymbolSize + 5 : 5, 5);
|
||||
}
|
||||
|
||||
@ -267,24 +269,21 @@ namespace Sunny.UI
|
||||
e.Bounds.Width - 5, 5 + titleSize.Height + 3);
|
||||
}
|
||||
|
||||
e.Graphics.DrawString(e.ToolTipText, tmpFont, ForeColor,
|
||||
e.Graphics.DrawString(e.ToolTipText, TempTitleFont, ForeColor,
|
||||
tooltip.Symbol > 0 ? tooltip.SymbolSize + 5 : 5,
|
||||
titleSize.Height > 0 ? 10 + titleSize.Height : 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Graphics.DrawString(e.ToolTipText, tmpFont, ForeColor, 0, 0);
|
||||
e.Graphics.DrawString(e.ToolTipText, TempTitleFont, ForeColor, 5, 5);
|
||||
}
|
||||
|
||||
tmpTitleFont.Dispose();
|
||||
tmpFont.Dispose();
|
||||
}
|
||||
|
||||
public class ToolTipControl : ISymbol
|
||||
{
|
||||
public Control Control { get; set; }
|
||||
public string Title { get; set; }
|
||||
public string Description { get; set; }
|
||||
public string ToolTipText { get; set; }
|
||||
|
||||
public int Symbol { get; set; }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user