【发布时间】:2012-12-21 20:58:38
【问题描述】:
我正在使用以下代码制作一个高度可调且垂直对齐的文本框。我应该这样做的原因是因为虽然我可以使winform文本框高度可调,但我仍然无法垂直对齐文本框中的文本。所以我决定我必须绘制文本 OnPaint 事件。文本框现在显示正确对齐,但光标仍位于文本框顶部。有没有办法控制这个位置?
public class TextBoxHeightAdjustable : System.Windows.Forms.TextBox
{
public TextBoxHeightAdjustable()
{
this.AutoSize = false;
this.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
}
protected override void OnPaint(PaintEventArgs e)
{
// This never runs no matter what I try!
base.OnPaint(e);
// Create a StringFormat object with the each line of text, and the block
// of text centered on the page.
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle, stringFormat);
}
}
【问题讨论】:
-
你无法完成这项工作,TextBox 很特别。
-
@HansPassant 看了超过 3500 行的 TextBox 源代码,我同意你的看法。问题是我们的经理不相信我们不能这样做。
-
不,这不是您可以查看的代码。 TextBox 是本机 Windows EDIT 控件的 .NET 包装类。由于 25 年的 appcompat hack,它肯定有数万行 C 代码。它始于 1980 年代,必须打破规则才能在 386SUX 上运行。尤其是绘画规则。