Winforms自定义文本框无法调整大小

本文关键字:调整 自定义 文本 Winforms | 更新日期: 2023-09-27 18:22:04

我创建了一个只允许数字的自定义文本框,但当我在页面上使用控件时,我无法增加其宽度。我试图将控件的autosize属性设置为TRUE,但没有成功。

下面提到了自定义文本框的代码

public partial class NumericalTextBox : UserControl
{
    public NumericalTextBox()
    {
        InitializeComponent();
        textBox1.KeyPress += NumericalTextBox_KeyPress;
    }
    private void NumericalTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if ((int)(e.KeyChar) == 22)
        {
            IDataObject clipData = Clipboard.GetDataObject();
            string dataSet = (string)clipData.GetData(DataFormats.Text);
            foreach (char data in dataSet)
            {
                if (!(char.IsNumber(data)) && !(char.IsControl(data)))
                {
                    e.Handled = true;
                    return;
                }
            }
            return;
        }
        else
        {
            if (((char.IsNumber(e.KeyChar))) || ((char.IsControl(e.KeyChar))))
            {
                return;
            }
        }
        e.Handled = true;
    }
}

有人能帮助我如何调整文本框的大小吗。

Winforms自定义文本框无法调整大小

您是否将textbox1设置为使用用户控件的大小进行锚定?如果不是,则只调整NumericalTextBox的大小,而不调整用户控件中包含的实际文本框的大小。

        textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
        | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right)));

如果文本框是唯一的控件,您也可以将dockstyle设置为填充:

textBox1.Dock = System.Windows.Forms.DockStyle.Fill;

然后,文本框将自动放大以填充用户控件中的可用空间。

正如您在问题评论中所提到的,实现NumericTextbox的正确方法是实际继承TextBox本身,并将处理代码放在其中。TextBox不是一个密封类,所以我看不出有任何理由不直接从那里继承。

    textBox1.Dock = DockStyle.Fill;

对于自定义控件,将AutoSize设置为false,将最大高度设置为20(与Textbox height相同)对于文本框,将Dock设置为Fill