加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#WinForms TextBox的垂直对齐等

发布时间:2020-12-16 03:38:27 所属栏目:百科 来源:网络整理
导读:我正在开发一个项目,更新他们的WinForms应用程序UI,使其与大小更加一致.默认情况下,TextBox和ComboBox控件具有不同的高度,即使使用相同的字体也是如此.我已经能够通过关闭AutoSize来调整文本框的大小,但文本仍然拥抱控件的顶部,在下面留下空隙. 有没有办法在
我正在开发一个项目,更新他们的WinForms应用程序UI,使其与大小更加一致.默认情况下,TextBox和ComboBox控件具有不同的高度,即使使用相同的字体也是如此.我已经能够通过关闭AutoSize来调整文本框的大小,但文本仍然拥抱控件的顶部,在下面留下空隙.

有没有办法在控件中垂直居中文本?

解决方法

如果您在控件上关闭AutoSize,它必须是Label,因为TextBox没有AutoSize属性. Label的TextAlign属性是ContentAligment类型,因此您可以设置水平和垂直对齐.

出于各种无聊的原因,Windows中的TextBox会自动调整其高度以适应所使用的字体.要控制文本的高度和垂直居中,您可以快速创建自定义UserControl,您可以用它替换所有文本框.

在用户控件上,将BorderStyle设置为Fixed3D,将BackColor设置为System.Window.添加TextBox并将其BorderStyle设置为None.在控件的Resize事件中,添加使TextBox与用户控件的客户区域宽度相同的代码(占边框像素)并左对齐(即textBox1.Left = 0;)并垂直居中(例如textBox1.Top =(this.Height – textBox1.Height)/ 2;).

最后,向用户控件添加您需要的任何TextBox类型的属性和事件(可能只是Text和TextChanged,我猜),并将它们连接起来,以便它们传递到控件内的TextBox,如下所示:

public string Text
{
    get
    {
        return textBox1.Text;
    }
    set
    {
        textBox1.Text = value;
    }
}

如果你想对此有所了解,你甚至可以将用户控件的TextAlign属性替换为实际为ContentAlignment类型的属性(如Label),然后将内部TextBox对齐以匹配.

这种方法适用于ComboBox,虽然看起来有些奇怪.使用ComboBox,将其FlatStyle属性设置为Flat – 否则您将像TextBox一样处理它.它看起来很奇怪,因为下拉箭头框不会完全位于面板的顶部和底部.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读