Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义控件组件设置位置C#_C#_Winforms_Custom Controls_Positioning - Fatal编程技术网

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

自定义控件组件设置位置C#,c#,winforms,custom-controls,positioning,C#,Winforms,Custom Controls,Positioning,我有自定义控件-使用Win窗体,它包含四个文本框,所有这些文本框都有属性来关闭或打开-我只是在它们上设置visible参数。 我想更改自定义控件的大小和位置-例如,当我关闭第一个文本框时,我想更改他下面所有3个组件的位置,使它们更高。 当然,我想使用每个文本框-每个文本框,在我改变位置的文本框下面,应该改变位置 我无法通过改变TextBox在其自身属性中的位置来实现这一点-我可以在我的上方询问TextBox,如果其属性设置为on或of,但它不起作用,因为我不知道在应用程序中设置属性的顺序 我可以

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

我无法通过改变TextBox在其自身属性中的位置来实现这一点-我可以在我的上方询问TextBox,如果其属性设置为on或of,但它不起作用,因为我不知道在应用程序中设置属性的顺序

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

我不能用一些变量来改变它——当我改变它时,其他的文本框并不关心它,而且它们以前已经设置了它们的位置


那么你知道我如何实现它吗?

FlowLayoutPanel正是为这种行为而设计的。将文本框放置在FlowLayoutPanel中,然后当您将其中一个或多个文本框的visible属性设置为false时,其他文本框将自动向上移动(如果是这样设置的话,则会向上移动)。

如果出于某种原因需要手动执行,只需创建一个控件链即可

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
    }
}

}

您使用的是WPF还是Win表单?对不起,我忘了-我使用的是Win表单。我在第一行使用的是Win表单句子。它将帮助那些愿意帮助你的人。