设置TextBox控件的高度文档翻译

5 篇文章 0 订阅
3 篇文章 0 订阅

原文来自: https://www.codeproject.com/Articles/29140/Set-TextBox-Height

翻译:Jeffrey Chou


设置TextBox控件的高度(Set TextBox Height)

如何如改变单行TextBox的高度。


目录

设置TextBox控件的高度(Set TextBox Height)

工程代码

简介

背景        

使用的代码        

使用控件

关于

历史

许可证     

下面的分享和作者介绍的部分就不翻译了


工程代码

Download user control - 11.11 KB

Download test project - 23.28 KB


简介

这篇文章是介绍如何去设置一个单行TextBox控件的高度。在C#中(或者是VB.NET中),对于TextBox这个控件,它忽略了高度的属性并自动调增它自己来适应字体的高度。通过计算确切的我们需要的字体大小,我们可以设置TextBox一个我们想要的高度。


背景        

我有一个C#的项目需要一个可以适应高度的单行TextBox。我寻找到了很多的如何去适应宽度的例子,但是并没有找到实现如何的动态调整一个TextBox高度的例子。此外,我并不想去使用多行的TextBox,因为我想保持单行额的TextBox自动完成的特性(the auto-complete features)。


使用的代码        

单行的TextBox是通过字体的大小来设置高度的,而不是通过TextBox自身的高度属性。如果你想要了解一个确切的高度,这将会变的很困难。幸运的是,字体的属性使用一个浮点值(a float)表示他的大小(emSzie)。你可以使用字体的分数来微调文本框的高度。

通过计算来确定所使用的TextBox的高度:

Height = ( Font Size * Font Line Spacing / Font Em Height ) + 7

•Font Size – 以像素为单位来测量字体的大小是最简单的,所以你不需要要屏幕的DIO中考虑DPI中的因素。

•Font Line Spacing - 在设计单元中,在两条连续的文本行之间的距离。

•Font Em Height - 在字体最宽的字母的设计单位中,通常是字母m。

 

TextBox在字体高度周围有3像素低和4像素的上白色空间。因此,计算增加了7像素的高度。

 

我们可以颠倒这个计算来获得所需高度所需的字体大小:

Font Size = ( height - 7 ) * Font Em Height / Font Line Spacing

此方法将返回一个字体对象,该字体对象根据所设定的TextBox高度得到:

private Font GetFontForTextBoxHeight(int TextBoxHeight, Font OriginalFont)
{
    // 想要的TextBox高度值
    float desiredheight = (float)TextBoxHeight;

    // 通过已经存在的Font对象来设置新的Font对象。
    // 我们通过使用fnt=new Font(...)构造函数,所以我们可以确信我们已经将GraphicsUnit设置为了 
    // Pixels。这避免了点和像素之间的DPI的转换。           
    Font fnt = new Font(OriginalFont.FontFamily,
                        OriginalFont.Size,
                        OriginalFont.Style,
                        GraphicsUnit.Pixel);
 
    // TextBoxes不能小于8个像素的大小。这8个像素的组成为4个像素的顶部空白和3个像素的底部空白,以及1个像素最小的希腊符号文本。
    if (desiredheight < 8)
        desiredheight = 8;

    // 确定Font对象额Em大小和Font的行间距。
    // 对于每一个Font对象,这些值将会是在字体样式中被给出的常数以及屏幕的DPI数据
    float FontEmSize = fnt.FontFamily.GetEmHeight(fnt.Style);
    float FontLineSpacing = fnt.FontFamily.GetLineSpacing(fnt.Style);
 
    // emSize是我们需要的字体的大小。
    // TextBoxes共有7个像素的上下空白的像素距离。
    float emSize = (desiredheight - 7) * FontEmSize / FontLineSpacing;
    
    // 创建我们需要的适当大小的字体
    fnt = new Font(fnt.FontFamily, emSize, fnt.Style, GraphicsUnit.Pixel);
 
    return fnt;
}

每当您必须设先置文本框大小时,使用上面的方法设置字体属性:

YourTextBox.Font = GetFontForTextBoxHeight(DesiredHeight, YourTextBox.Font); 

使用控件

这个“可调节高度的”TextBox是一个可以添加到你项目中的一个用户控件。它的行为与常规文本框相同,只是:

  • 你可以在设计模式视图下,通过“Size_AdjustableHeigh”属性,设置TextBox高度;
  • 如果在单行的模式下,控件将响应填充(Dock)和锚固(Anchoring);
  •  

如何使用控件:

1.在设计器模式下,在你的工具箱的空的地方右键;

2.点击浏览。然后导航到AdjustableHeightTextbox.dll。最后点击确定;

3.添加该控件到你的窗体;

(这里说的太麻烦,直接将dll拖入工具箱的面板中,vs会自动导入,然后找到控件使用即可。=  =)

 

 使用愉快!


关于

  • 我了解到.NET文本框代码基本上是旧MFC文本框控件的包装器。这就是为什么它不是非常可定制的。
  • 函数GetFontForTextBoxHeight()的过程,可以通过一些调整,来说用到ComboBox中。高度计算是接近的,但只是有几个像素的不同(【译者注】:这里估计是上3下4的像素值不同)。

这里缺少关于文本框控件内部操作的信息(与大多数标准.NET控件一样)。我希望这篇文章能帮你节省几个小时的搜索时间。


历史

2008.09.07 - 发表原创文章(本文)

2008.09.10 - 添加了文本框的用户控件版本和测试项目


许可证     

         本文连同任何相关的源代码和文件,通过了The Code Project Open License (CPOL)的许可。


下面的分享和作者介绍的部分就不翻译了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值