【问题标题】:Changing WinForms TextBox to BorderStyle.None causes text to be cut off将 WinForms TextBox 更改为 BorderStyle.None 会导致文本被截断
【发布时间】:2012-01-18 20:40:06
【问题描述】:

我已将 WinForms TextBox 控件更改为没有边框。

当我在框中的文本底部像素行被切断时。

顶部: BorderStyle.Fixed3D(默认)。 底部: BorderStyle.None

可以看到无边框文本框中的最后一段文字被截断了:

我如何说服TextBox(他的身高不能改变),它需要更高?

【问题讨论】:

  • 是不是有一个你可以打开或关闭的自动调整大小属性。?除非我错了,否则你应该也可以设置宽度和高度。
  • 事实上,你大错特错了。您正在考虑AutoSize (msdn.microsoft.com/en-us/library/…)。我的第一个想法也是。将其关闭再打开,以便 .NET 摆脱其程序集。但是TextBox 没有AutoSize 属性。此外,任何调整 TextBox 高度的尝试(例如 HeightBounds.HeightClientRectangleClientSize)都会忽略任何高度变化。 TextBox 自己决定它的高度,就是这样。
  • 在这里试一试another answer 很相似

标签: winforms


【解决方案1】:

这似乎可以解决问题:

public Form2()
{
    InitializeComponent();
    textBox1.Multiline = true;
    textBox1.MinimumSize = new Size(0, 30);
    textBox1.Size = new Size(textBox1.Size.Width, 30);
    textBox1.Multiline = false;
}

【讨论】:

    【解决方案2】:

    AutoSize 属性在那里,只需从TextBox 继承,您就可以访问该属性:

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

    【讨论】:

      【解决方案3】:

      您可以在表单中执行此操作:

          private void RefreshHeight(TextBox textbox)
          {
              textbox.Multiline = true;
              Size s = TextRenderer.MeasureText(textbox.Text, textbox.Font, Size.Empty, TextFormatFlags.TextBoxControl);
              textbox.MinimumSize = new Size(0, s.Height + 1);
              textbox.Multiline = false;
          }
      

      那你说RefreshHeight(textbox1);

      Multiline 更改将强制文本框“接受”新大小

      【讨论】:

        【解决方案4】:

        您也可以在 Visual Studio 设计器中解决此问题。

        在文本框的最小尺寸属性中更改高度。更改为 multiline=true,然后返回 false。文本框将调整大小并保持不变。

        无需更改代码。

        【讨论】:

        • 这在 VS 2017 中不起作用。它会立即切换回来。少了一步?
        • VS2013。也许 2017 年会有所不同。
        • 适用于 VS 2008
        猜你喜欢
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 2020-08-24
        • 2017-03-27
        • 1970-01-01
        • 2016-04-23
        • 1970-01-01
        • 2018-03-23
        相关资源
        最近更新 更多