gpt4 book ai didi

c# - 如何使用自定义颜色为 MaskedTextBox 绘制边框?

转载 作者:行者123 更新时间:2023-11-30 20:34:19 27 4
gpt4 key购买 nike

我正在尝试创建一个具有边框颜色的蒙版文本框。

我尝试了下面的代码来实现它:

public class MaskedTextBoxWithBorder : UserControl
{
MaskedTextBox maskedtextBox;

public MaskedTextBoxWithBorder()
{
maskedtextBox = new MaskedTextBox()
{
BorderStyle = BorderStyle.FixedSingle,
Location = new Point(-1, -1),
Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right
};
Control container = new ContainerControl()
{
Dock = DockStyle.Fill,
Padding = new Padding(-1)
};
container.Controls.Add(maskedtextBox);
this.Controls.Add(container);

DefaultBorderColor = SystemColors.ControlDark;
FocusedBorderColor = Color.Red;
BackColor = DefaultBorderColor;
Padding = new Padding(1);
Size = maskedtextBox.Size;
}

public Color DefaultBorderColor { get; set; }
public Color FocusedBorderColor { get; set; }

public override string Text
{
get
{
return maskedtextBox.Text;
}
set
{
maskedtextBox.Text = value;
}
}

protected override void OnEnter(EventArgs e)
{
BackColor = FocusedBorderColor;
base.OnEnter(e);
}

protected override void OnLeave(EventArgs e)
{
BackColor = DefaultBorderColor;
base.OnLeave(e);
}

protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
{
base.SetBoundsCore(x, y, width, maskedtextBox.PreferredHeight, specified);
}
}

但问题是它没有屏蔽文本框的所有功能,如设置屏蔽类型等。

所以我这样修改了我的代码:

public class MaskedTextBoxWithBorder : UserControl

现在我拥有蒙版文本框的所有功能,但边框颜色不受影响。

有没有什么方法可以扩展 Masked 文本框以获得边框样式而不丢失像这样的不可能的功能。

public class MaskedTextBoxWithBorder : UserControl, MaskedTestBox

最佳答案

绘制MaskedTextBox的边框你应该覆盖 WndProc和处理WM_NCPAINT信息。然后获取控件的窗口 dc 并从该 dc 创建一个 Graphics 对象,然后为控件绘制边框。此解决方案也已在 ToolStripTextBox 中使用。该解决方案也可以应用于 TextBox

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class MyMaskedTextBox : MaskedTextBox
{
public const int WM_NCPAINT = 0x85;
[DllImport("user32.dll")]
public static extern IntPtr GetWindowDC(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_NCPAINT)
{
var hdc = GetWindowDC(this.Handle);
using (var g = Graphics.FromHdcInternal(hdc))
{
g.DrawRectangle(Pens.Blue, new Rectangle(0, 0, Width - 1, Height - 1));
}
ReleaseDC(this.Handle, hdc);
}
}
}

关于c# - 如何使用自定义颜色为 MaskedTextBox 绘制边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39406112/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com