【发布时间】:2013-06-29 04:15:42
【问题描述】:
我正在尝试为我的文本框创建自定义 onPaint,它正在工作...it is working 但是当我尝试输入内容时,a textbox is rendering above the textbox。
这是我的构造函数:
public TextBox()
{
Font = new Font("Segoe UI", 11F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));
BackColor = Color.White;
BorderColor = Color.Gray;
BorderStyle = BorderStyle.None;
SetStyle(ControlStyles.UserPaint, true);
}
还有onPaint:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillRectangle(backgroundBrush, 0, 0, this.Width, this.Height);
SizeF fontSize = g.MeasureString(Text, Font);
g.DrawString(Text, Font, new SolidBrush(ForeColor), new PointF(5, 5), cFormat);
g.DrawRectangle(borderPen, borderPen.Width / 2, borderPen.Width / 2,
this.Width - borderPen.Width, this.Height - borderPen.Width);
}
【问题讨论】:
-
TextBox 控件不使用 Paint 事件,因此您看到的是控件的版本和您自己的版本。
-
对,所以我需要自己控制吗?还是有别的办法?
-
如果您只想制作边框,请尝试将 TextBox 放在具有 2 像素填充的面板内,并将 TextBox 设置为 Dock.Fill 和 MultiLine=true。否则,不清楚为什么您要尝试绘制 TextBox。
-
@LarsTech 我们想要一个带有自定义边框颜色的文本框。
-
@HighCore 你又来了,我想知道你为什么喜欢参与
Winforms问题,而你认为它已经死了。劝人让winforms早点死?我不认为你必须这样做。许多人肯定会认识到WPF对他们来说更好。我还向您打赌,WPF将成为我下一个商业项目的选择。但是我仍然会学习/学习Winforms以练习其他技能,例如 GDI+、Win32 等……只是为了好玩。