diff --git a/Bin/net40/SunnyUI.Demo.exe b/Bin/net40/SunnyUI.Demo.exe index 35a93dbd..5cf87628 100644 Binary files a/Bin/net40/SunnyUI.Demo.exe and b/Bin/net40/SunnyUI.Demo.exe differ diff --git a/Bin/net40/SunnyUI.dll b/Bin/net40/SunnyUI.dll index f73898b7..db56cde6 100644 Binary files a/Bin/net40/SunnyUI.dll and b/Bin/net40/SunnyUI.dll differ diff --git a/SunnyUI.Demo/Controls/FOther.Designer.cs b/SunnyUI.Demo/Controls/FOther.Designer.cs index ca9965bf..7532c30a 100644 --- a/SunnyUI.Demo/Controls/FOther.Designer.cs +++ b/SunnyUI.Demo/Controls/FOther.Designer.cs @@ -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 // diff --git a/SunnyUI/Controls/UIToolTip.cs b/SunnyUI/Controls/UIToolTip.cs index 34725e7b..c86ec7a8 100644 --- a/SunnyUI/Controls/UIToolTip.cs +++ b/SunnyUI/Controls/UIToolTip.cs @@ -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(); - - tmpTitleFont.Dispose(); - tmpFont.Dispose(); } } } + else + { + SizeF sf = GDI.MeasureString(GetToolTip(e.AssociatedControl), TempTitleFont); + e.ToolTipSize = new Size((int)sf.Width + 10, (int)sf.Height + 10); + } + } + + 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; }