如何在不使用Multiline = "true"或增加字体大小的情况下增加文本框的高度?

8

我需要调整文本框的高度,以适应触摸屏。

我知道人们推荐使用 Multiline = "true",但如果这样做,框内的文本将与顶部对齐,这在我的应用程序中不合适。

我尝试调整字体大小,但为了满足我的需求,字体大小应该非常大。

是否有其他方法可以增加文本框的高度?


你可以使用填充(padding)来增加文本框的大小并使其“正常”对齐。 - Grant Thomas
@david 想得不太周全:在WinForms中,我们没有针对TextBox的填充(Padding)选项。 - Grant Thomas
4个回答

12

试一下这个:

textBox1.AutoSize = false;

虽然它不会出现在Intellisense中,但它能够正常工作。

如果想让它在设计器中有效,你需要自己创建一个TextBox:

public class TextBoxEx : TextBox {
  public TextBoxEx() {
    this.AutoSize = false;
  }
}

1
@david 另外的方法是使用没有边框的 TextBox,并将其放置在具有相同背景颜色的 UserControl 中,然后处理在调整大小时 TextBox 在 UserControl 范围内的位置。这样做并不理想,因为你会失去带有视觉样式的 TextBox 边框。WinForms 在这方面表现不佳,而WPF则更好地处理了这个问题。 - LarsTech
1
@LarsTech 看起来让文本框变得更大并不符合 OP 的需求。实际上他想要的是让文本框变得更大,以便更容易点击。 - McKay
@Nyerguds,你的评论实际上没有意义。如果单行文本框换行,那么它必须是多行的。 - LarsTech
@LarsTech 不完全是。我的用例是在相当窄的文本框中显示不应包含换行符的单行文本。我希望它在变得太长时自动换行,并在变得过大时使用垂直滚动条。遗憾的是,“MultiLine”属性总是同时影响控件和其内容;一旦将其设置为MultiLine,它将允许换行。 - Nyerguds
最终,我只使用了KeyPress和TextChanged监听器来过滤掉所有的换行符。不过,为了保留文本光标位置,需要进行一些创造性的调整。 - Nyerguds
显示剩余4条评论

1

技巧步骤:

  1. 将multi-line设置为true
  2. 无需更改字体大小。
  3. 更改Max-length。以便不会进入下一行。

0

对于我想要做的事情,使用标签而不是BorderStyle=Fixed3DAutoSize=False就可以解决问题。


0
我发现下面的解决方案是一个相当不错的妥协。它关闭了控件的AutoSize属性,并增加了其内容的字体大小。到目前为止,在各种DPI环境下,它似乎表现得很好。
public class SingleLineTextBox : TextBox
{
    protected override void OnCreateControl()
    {
        base.OnCreateControl();

        if (Font is Font font)
            using (font)
            {
                // Suppress the single-line textbox's fixed height
                AutoSize = false;
                // Increase size of textbox contents to compensate
                // for vertical shift
                Font = new Font(font.FontFamily, font.Size + 0.75F);
            }
    }
}

在这个解决方案之后:

After this solution

在这个解决方案之前:

Before this solution


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接