0

我有一个包含多个 TextBox 控件的表单。有些将多行设置为真,有些则设置为否。使用大字体时,文本位置很明显不同。当 multiline 为真时,文本周围会出现某种额外的边距。下面的代码片段

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?

感谢您为回答我的问题所做的任何努力!

4

2 回答 2

2

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

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

干杯

于 2012-10-23T12:53:43.887 回答
0

出于某种原因,我不确定 Segoe UI 似乎会抵消多行文本框中的字符。Microsof Sans Serif 没有同样的问题。

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

于 2012-10-23T12:59:43.603 回答