Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置文本框的高度?_C#_Winforms - Fatal编程技术网

C# 如何设置文本框的高度?

C# 如何设置文本框的高度?,c#,winforms,C#,Winforms,对于我的单行文本框,我设置为Border=None。执行此操作时,高度变小。我无法通过编程设置文本框的高度。如果我设置了任何边界,那么也可以,但我不想要任何边界。甚至文本也不完全可见-因此字体大小已经大于文本框高度 我尝试创建一个自定义文本框,并设置它的高度,但没有效果。如何处理这种情况?非常感谢您的帮助。我只是在一个空项目中创建了这个案例,没有看到您描述的结果 当BorderStyle为none时,文本框的显示区域将自动调整为所选字体的大小。如果然后将Multiline=true,则可以更改S

对于我的单行文本框,我设置为Border=None。执行此操作时,高度变小。我无法通过编程设置文本框的高度。如果我设置了任何边界,那么也可以,但我不想要任何边界。甚至文本也不完全可见-因此字体大小已经大于文本框高度


我尝试创建一个自定义文本框,并设置它的高度,但没有效果。如何处理这种情况?非常感谢您的帮助。

我只是在一个空项目中创建了这个案例,没有看到您描述的结果

当BorderStyle为none时,文本框的显示区域将自动调整为所选字体的大小。如果然后将Multiline=true,则可以更改Size属性的高度部分,并且更改将保持不变

也许代码的另一部分是修改高度?可能是一个调整事件处理程序

我的建议是:

  • 张贴代码的相关部分
  • 尝试在一个空的WinForms项目中重现这个问题(就像我刚才做的那样)
控件会自动调整大小以适应其高度,而不管您选择什么。这是VisualStudio使用的默认设置的一部分

通过更改,可以替代


希望这有帮助。

TextBox
源于
控件
,该控件具有AutoSize属性,但设计者已将该属性隐藏在PropertyGrid和Intellisense中,但您仍然可以访问它:

public class TextBoxWithHeight : TextBox {

  public TextBoxWithHeight() {
    base.AutoSize = false;
  }
}

重新生成并使用。

有一种简单的方法不创建新类。 在Designer.cs文件中:

this.textBox1.AutoSize = false;
this.textBox1.Size = new System.Drawing.Size(228, 25);

仅此而已。

只需选择文本框并转到属性,然后增加字体大小。。完成

我发现最好的解决方案是对文本框进行子类化,并在其中显示隐藏的自动大小:

public class TextBoxWithHeight : TextBox 
{
    public bool Auto_Size
    {
        get { return this.AutoSize; }
        set { this.AutoSize = value; }
    }
}

现在,您可以使用可视化设计器中的对象检查器或代码中的对象检查器来打开或关闭自动调整大小,无论您喜欢什么。

我尝试过在一个空项目中使用它,它确实如您所说的那样工作。实际上,文本框是一个自定义的文本框,文本在第四个y轴上绘制,这就是造成差异的原因。感谢更改多行属性有副作用,例如禁用自动完成功能,以及在文本过长时将最后一个单词从行中换行。因此,在许多情况下,将Multiline设置为true是不可接受的。此外,OP的问题确实发生在标准文本框控件中。要复制它:创建一个新的空项目,添加一个文本框,并将其字体设置为“Microsoft Sans Serif,9.75pt”。将其文本设置为“你好,乔”,并将其边框样式设置为“无”。您将看到“g”、“y”和“j”都被截断。@ricovox:这可能是一般情况,但具体到所问的问题,此解决方案似乎是合适的,因为OP接受了它。进一步检查后,这似乎是TextBox控件绘制文本的一个错误。如果查看标准文本框控件,字体大小设置为9.0,则文本上方有4行空白像素,但下方只有一行。你会注意到“g”的底部“钩子”完全被切掉了。所以文本被涂得太低了。Sereban给出了最佳解决方案:将TextBox的hidden AutoSize属性设置为False。然后,您可以将大小设置为所需的大小,而无需修改“多行”属性。这似乎是定位的问题,但可能不是。正如某些图示符可以有下降符一样,其他图示符也会上升到基线之上。我认为MS可能实际上把自动调整大小的算法弄错了。在11.25磅时,具有单像素边框的文本框的高度为24。去掉边界,它会一直下降到17。这是一个7像素的减色为2(或可能4)像素的变化!谢谢古斯塔沃。使多行为真,然后设置其高度也是一个很好的选择。非常感谢。这是有效的解决方案。我用我表格中的代码编写并提供了帮助。在默认字体大小(Microsoft Sans Serif 8.25 pt)下,这不会发生。但是,如果您增加字体大小,低于基线超过两个像素的字形将被截断。这很好,除非您在理想情况下不想硬编码更正的高度,因为您希望它能够适当地响应字体高度的更改(在Designer中)。一个在Designer中可以正常工作的自定义控件是理想的,尽管有点麻烦。不,这不起作用。它使文本框变大,但文本仍然被剪裁。
public class TextBoxWithHeight : TextBox 
{
    public bool Auto_Size
    {
        get { return this.AutoSize; }
        set { this.AutoSize = value; }
    }
}