From 06f7dfcc0f19958a4f415ad5d5a5a826038c67ff Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 23 Jun 2022 10:54:12 +0800 Subject: [PATCH] =?UTF-8?q?*=20UITextBox:=20=E9=87=8D=E5=86=99=E6=B0=B4?= =?UTF-8?q?=E5=8D=B0=E6=96=87=E5=AD=97=EF=BC=8C=E8=A7=A3=E5=86=B3=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E8=83=8C=E6=99=AF=E8=89=B2=E4=B8=8B=E6=B3=9B=E7=99=BD?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SunnyUI/Controls/DropItem/UIDropControl.cs | 8 ++ SunnyUI/Controls/UIEdit.cs | 125 ++++++++++++++++++++- SunnyUI/Controls/UITextBox.cs | 9 ++ 3 files changed, 137 insertions(+), 5 deletions(-) diff --git a/SunnyUI/Controls/DropItem/UIDropControl.cs b/SunnyUI/Controls/DropItem/UIDropControl.cs index 8bb94031..69514cce 100644 --- a/SunnyUI/Controls/DropItem/UIDropControl.cs +++ b/SunnyUI/Controls/DropItem/UIDropControl.cs @@ -140,6 +140,14 @@ namespace Sunny.UI set => edit.WaterMarkColor = value; } + [DefaultValue(typeof(Color), "Gray")] + [Description("水印文字激活颜色"), Category("SunnyUI")] + public Color WatermarkActiveColor + { + get => edit.WaterMarkActiveForeColor; + set => edit.WaterMarkActiveForeColor = value; + } + private UIDropDown itemForm; protected UIDropDown ItemForm diff --git a/SunnyUI/Controls/UIEdit.cs b/SunnyUI/Controls/UIEdit.cs index 61d90396..baa35db9 100644 --- a/SunnyUI/Controls/UIEdit.cs +++ b/SunnyUI/Controls/UIEdit.cs @@ -46,6 +46,108 @@ namespace Sunny.UI base.ForeColor = UIFontColor.Primary; Width = 150; base.MaxLength = 32767; + + waterMarkBrush = new SolidBrush(_waterMarkActiveColor); + waterMarkContainer = null; + + DrawWaterMark(); + this.Enter += new EventHandler(ThisHasFocus); + this.Leave += new EventHandler(ThisWasLeaved); + this.TextChanged += new EventHandler(ThisTextChanged); + } + + private void DrawWaterMark() + { + if (this.waterMarkContainer == null && this.TextLength <= 0) + { + waterMarkContainer = new Panel(); + waterMarkContainer.Paint += new PaintEventHandler(waterMarkContainer_Paint); + waterMarkContainer.Invalidate(); + waterMarkContainer.Click += new EventHandler(waterMarkContainer_Click); + this.Controls.Add(waterMarkContainer); + } + } + + private void waterMarkContainer_Paint(object sender, PaintEventArgs e) + { + waterMarkContainer.Location = new Point(2, 0); + waterMarkContainer.Height = this.Height; + waterMarkContainer.Width = this.Width; + waterMarkContainer.Anchor = AnchorStyles.Left | AnchorStyles.Right; + + if (this.ContainsFocus) + { + waterMarkBrush = new SolidBrush(this._waterMarkActiveColor); + } + else + { + waterMarkBrush = new SolidBrush(this._waterMarkColor); + } + + Graphics g = e.Graphics; + g.DrawString(this._waterMarkText, Font, waterMarkBrush, new PointF(-2f, 1f));//Take a look at that point + } + + private void RemoveWaterMark() + { + if (waterMarkContainer != null) + { + Controls.Remove(waterMarkContainer); + waterMarkContainer = null; + } + } + + private void ThisHasFocus(object sender, EventArgs e) + { + waterMarkBrush = new SolidBrush(this._waterMarkActiveColor); + + if (this.TextLength <= 0) + { + RemoveWaterMark(); + DrawWaterMark(); + } + } + + private void ThisWasLeaved(object sender, EventArgs e) + { + if (this.TextLength > 0) + { + RemoveWaterMark(); + } + else + { + Invalidate(); + } + } + + private void ThisTextChanged(object sender, EventArgs e) + { + if (this.TextLength > 0) + { + RemoveWaterMark(); + } + else + { + DrawWaterMark(); + } + } + + private void waterMarkContainer_Click(object sender, EventArgs e) + { + this.Focus(); + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + DrawWaterMark(); + } + + protected override void OnInvalidated(InvalidateEventArgs e) + { + base.OnInvalidated(e); + if (waterMarkContainer != null) + waterMarkContainer.Invalidate(); } [Browsable(false), DefaultValue(false)] @@ -60,18 +162,19 @@ namespace Sunny.UI } } - private string watermark; + private Panel waterMarkContainer; + private SolidBrush waterMarkBrush; + + private string _waterMarkText = ""; [DefaultValue(null)] public string Watermark { - get => watermark; + get => _waterMarkText; set { - watermark = value; - //WaterMark_Toggle(null, null); + _waterMarkText = value; Invalidate(); - //Win32.User.SendMessage(Handle, 0x1501, (int)IntPtr.Zero, value); } } @@ -86,6 +189,18 @@ namespace Sunny.UI } } + private Color _waterMarkActiveColor = Color.Gray; + + public Color WaterMarkActiveForeColor + { + get => _waterMarkActiveColor; + set + { + _waterMarkActiveColor = value; + Invalidate(); + } + } + protected override void OnKeyDown(KeyEventArgs e) { if (!Multiline) diff --git a/SunnyUI/Controls/UITextBox.cs b/SunnyUI/Controls/UITextBox.cs index b5c33bc6..db8b4e19 100644 --- a/SunnyUI/Controls/UITextBox.cs +++ b/SunnyUI/Controls/UITextBox.cs @@ -34,6 +34,7 @@ * 2022-03-14: V3.1.1 增加滚动条的颜色设置 * 2022-04-11: V3.1.3 增加对按钮设置ToolTip * 2022-06-10: V3.1.9 尺寸改变时重绘 + * 2022-06-23: V3.2.0 重写水印文字,解决不同背景色下泛白的问题 ******************************************************************************/ using System; @@ -486,6 +487,14 @@ namespace Sunny.UI set => edit.WaterMarkColor = value; } + [DefaultValue(typeof(Color), "Gray")] + [Description("水印文字激活颜色"), Category("SunnyUI")] + public Color WatermarkActiveColor + { + get => edit.WaterMarkActiveForeColor; + set => edit.WaterMarkActiveForeColor = value; + } + public void SelectAll() { edit.Focus();