我有自定义控件 - 使用Win Forms,它包含四个TextBox,都具有关闭或打开它们的属性 - 我只是在它们上设置可见参数。 我想改变自定义控件的大小和位置 - 例如,当我关闭第一个文本框时,我想改变他下面所有3个组件的位置,以使它们更高。 当然,我想用每个TextBox工作 - 每个TextBox,在TextBox下面我改变位置,应该改变位置。
我无法通过改变TextBox在其自己的属性中的位置来实现它 - 我可以在我之上询问TextBox,如果它的属性设置为on或of,但它不起作用,因为我不知道设置属性的顺序在申请中。
我可以在我下方改变TextBox的位置 - 在Top文本框的属性中,但我可以在下面只有一个TextBox,我不知道并且无法找到,如果下面的两个TextBox没有关闭,第四个TextBox应该是在第二位置。
我不能通过使用一些变量来改变它 - 当我改变它时,其他TextBoxes不关心它并且它们之前已经设置了它们的位置。
所以你知道我怎么能实现它?
答案 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
}
}
}