自定义控制组件设置位置C#

时间:2011-07-30 09:26:16

标签: c# winforms custom-controls positioning

我有自定义控件 - 使用Win Forms,它包含四个TextBox,都具有关闭或打开它们的属性 - 我只是在它们上设置可见参数。 我想改变自定义控件的大小和位置 - 例如,当我关闭第一个文本框时,我想改变他下面所有3个组件的位置,以使它们更高。 当然,我想用每个TextBox工作 - 每个TextBox,在TextBox下面我改变位置,应该改变位置。

我无法通过改变TextBox在其自己的属性中的位置来实现它 - 我可以在我之上询问TextBox,如果它的属性设置为on或of,但它不起作用,因为我不知道设置属性的顺序在申请中。

我可以在我下方改变TextBox的位置 - 在Top文本框的属性中,但我可以在下面只有一个TextBox,我不知道并且无法找到,如果下面的两个TextBox没有关闭,第四个TextBox应该是在第二位置。

我不能通过使用一些变量来改变它 - 当我改变它时,其他TextBoxes不关心它并且它们之前已经设置了它们的位置。

所以你知道我怎么能实现它?

2 个答案:

答案 0 :(得分:5)

FlowLayoutPanel专门针对这种行为而设计。将文本框放在FlowLayoutPanel中,然后当您将其中一个或多个的visible属性设置为false时,其他文本框将自动向上移动(或者如果您设置它的方式结束)。

答案 1 :(得分:0)

如果您出于某种原因需要手动操作,只需制作一系列控件。

public class CustomTextBox
{
public CustomTextBox(CustomTextBox previousSibling)
{
    PreviousSibling = previousSibling;
}

public CustomTextBox PreviousSibling { get; private set; }

public CustomTextBox PreviousVisibleSibling
{
    get
    {
        if (PreviousSibling == null)
        {
            return null;
        }
        return PreviousSibling.Visible ? PreviousSibling : PreviousSibling.PreviousVisibleSibling
    }
}

}