AutoSize = false时,在文本框中垂直对齐文本

时间:2014-11-10 01:11:08

标签: c# winforms winapi custom-controls controls

我正在尝试在System.Windows.Forms命名空间中扩展标准TextBox控件。我想要完成的一件事就是修改TextBox顶部和底部的填充(文本和边框之间的间距)。

在左/右侧进行操作非常简单,但我很难在顶部/底部进行任何操作。

以下是我的一些要求(如果可能):

  • 避免扩展除System.Windows.Forms.TextBox(无UserControls)
  • 之外的任何内容
  • 我想保留MultiLine = false

此代码允许我垂直调整大小,并添加左边距:

public class TextBoxTest : TextBox
{
    public TextBoxTest()
    {
        base.AutoSize = false;
        NativeMethods.SendMessage(Handle, NativeMethods.EM_SETMARGINS, NativeMethods.EC_LEFTMARGIN, 20);

        base.Height = 55;
        base.Width = 150;
        base.Text = "This is a test";
    }
}

这看起来像是:

enter image description here

我也试过EM_SETRECT,但它需要一个MultiLine TextBox。

是否可以使用顶部/底部边距(或垂直中心) - 不使用UserControl并保持MultiLine = false?

如果是这样,有人能指出我正确的方向吗?

更新,澄清一下,我想继承TextBox的原因,而不是UserControl或Panel,因此它通过了duck测试(如果它看起来像鸭子,嘎嘎叫鸭子等)。我希望if (myControl is TextBox) ...评估为true。可能有一种方法可以做到这一点,我对类型转换器做了很多,也许这就是我应该采取的路径。

我希望这是TextBox的真正扩展。换句话说,它可以做几乎所有文本框可以做的事情加上一些,但没有限制,因为它不是“TextBox”类型的事实。看起来有必要以某种方式调整它,它支持左右边距但看起来不是上/下边距。再次感谢

1 个答案:

答案 0 :(得分:0)

您无法从代码中更改Windows窗体文本框的填充属性。

相反,您可以将文本框放在容器中,例如面板 删除文本框的边框,确保两者的BackColor属性相同 将文本框的Dock属性更改为Fill 然后在面板上应用填充。