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

时间:2014-09-15 12:32:49

标签: c# winforms textbox

我创建了一个只允许数字的自定义文本框但是当我在页面上使用该控件时,我无法增加其宽度。我试图将控件的自动调整属性设置为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;
    }
}

有人可以帮我解决如何启用文本框大小调整的问题。

3 个答案:

答案 0 :(得分:2)

您是否将textbox1设置为以usercontrol的大小锚定?如果没有,它只调整NumericalTextBox的大小,但不调整usercontrol中包含的实际文本框。

        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 is not a sealed class所以我没有看到任何不直接从那里继承的理由。

答案 1 :(得分:0)

    textBox1.Dock = DockStyle.Fill;

答案 2 :(得分:0)

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