【发布时间】:2010-11-16 08:39:11
【问题描述】:
我正在使用以下代码来获取未绘制边框的 TextBox:
public partial class CustomTextBox : TextBox
{
public CustomTextBox()
{
InitializeComponent();
SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
int borderWidth = 1;
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle,
Color.Transparent, borderWidth, ButtonBorderStyle.Solid,
Color.Transparent, borderWidth, ButtonBorderStyle.Solid,
Color.Transparent, borderWidth, ButtonBorderStyle.Solid,
Color.Transparent, borderWidth, ButtonBorderStyle.Solid);
}
}
我似乎错过了 OnPaint() 内部的某些内容,因为我的字体不再是文本框的默认字体(也许我必须覆盖另一个事件)。
检查 CustomTextBox.Font 属性时,它会显示默认的“Microsoft SansSerif in 8,25”,但在我的 textBox 中输入文本时,字体肯定看起来更大更粗。
希望你能帮助我!
问候,
创新
[编辑]
我应该提到,如果我不覆盖 OnPaint,我的 CustomTextBox 的字体是正确的。仅当覆盖 OnPaint 时,我的字体不正确(输入文本时字体更大并且似乎是粗体)。 所以我认为我必须做一些事情来正确初始化 OnPaint 内的字体(但 ATM 我不知道该怎么做)。
【问题讨论】:
-
不要在构造函数中将
UserPaint设置为 true,而是在OnControlCreated()中设置。这将解决字体问题。
标签: c# .net winforms user-controls