当调整用户控件的大小时,如何在用户控件内自动居中文本框?

时间:2014-09-21 18:48:51

标签: c# winforms user-controls

这个问题与C#WinForms有关...我有自定义用户控件,它基本上有3个东西:标签,文本框和列表框,所有这些都垂直排列如下:

XXXXXXXXXXXXX

我编写了一个小型的Custom ControlDesigner类,以防止用户在设计时更改此用户控件的高度。

我还设置了文本框和列表框以锚定到左/右位置,这样当用户更改用户控件的宽度时,这两个内部控件可以很好地调整大小。

我想让Label也是水平中心,但是将它锚定到左/右并不起作用。我想我可能不得不在自定义控件设计器类中编写某种自定义调整大小函数,当调整用户控件时会自动将标签放在中间?

另请注意,我希望标签在标签文本更改时仍保留在中心位置。

那我该怎么做?

到目前为止,这是我的自定义控件设计器类:

public class DropDownTextBoxDesigner : System.Windows.Forms.Design.ControlDesigner
    {
        public override SelectionRules SelectionRules
        {
            get
            {
                SelectionRules retVal =
                      SelectionRules.Visible |
                      SelectionRules.Moveable |
                      SelectionRules.LeftSizeable |
                      SelectionRules.RightSizeable;

                return retVal;
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

编写用户控件事件的SizeChanged,如下所示:

private void UserControl1_SizeChanged(object sender, EventArgs e)
    {
        textBox1.Left = Width / 2 - textBox1.Width / 2;
        textBox1.Top = Height / 2 - textBox1.Height / 2;
    }

答案 1 :(得分:0)

在resize事件中,您是否可以设置标签的左侧属性以使其在容器中居中?

Label.Left = (Container.Width / 2) - (Label.Width / 2);