当多行设置为true时,为什么文本位置不同。这可以避免吗?

时间:2012-10-23 12:44:36

标签: c# winforms textbox

我有一个包含多个TextBox控件的表单。有些人将多行设置为true,其他为no。使用大字体时,很明显文本定位不同。当多线为真时,文本周围会出现一些额外的边距。 以下代码片段

TextBox textBox = new TextBox();
textBox.Text = "Test";
textBox.Font = new Font("Segoe UI", 16);
Console.WriteLine("Single Line:" + textBox.GetPositionFromCharIndex(0));
textBox.Multiline = true;
Console.WriteLine("Multi Line:" + textBox.GetPositionFromCharIndex(0));

输出 单行:{X = 1,Y = 0} 多行:{X = 7,Y = 1}

我的问题是: 为什么在多线模式下添加此边距? 这可以避免/控制吗?

我已经发现多线模式中的文字是用

绘制的
TextFormatFlags.TextBoxControl | TextFormatFlags.WordBreak | TextFormatFlags.NoClipping

在单线模式下

TextFormatFlags.TextBoxControl | TextFormatFlags.NoPadding | TextFormatFlags.SingleLine

被使用。 有没有办法控制TextBox使用的TextFormatFlags?

感谢您为回答我的问题而付出的任何努力!

2 个答案:

答案 0 :(得分:2)

您必须创建自己的从TextBox派生的类,并通过重写OnPaint来处理Paint事件。

在那里,您将完全控制如何根据需要使用正确的TextFormatFlags为TextBox呈现文本。

干杯

答案 1 :(得分:0)

出于某种原因,我不确定Segoe UI是否会在多行文本框中偏移你的角色.Microsof Sans Serif没有同样的问题。

我的建议:尝试使用其他字体。