C#:找到下一个和上一个兄弟控件的好方法

时间:2009-09-01 07:13:14

标签: c# winforms user-controls

找到控件的下一个和上一个兄弟的好方法是什么?

因此,例如,如果您的面板中包含许多按钮,文本框等。在那些你有一个用户控件,其中包含一个文本框和一个按钮。单击该按钮时,您需要查找此用户控件之后的控件名称。

我的目标是创建一个用户控件,可以将其位置与之前或之后的任何内容进行交换(如果有的话)。

我知道这应该是微不足道的,但我似乎无法绕过这一个...... = /

5 个答案:

答案 0 :(得分:1)

看起来您可以使用当前控件调用Controls.GetChildIndex(control)来获取其索引,然后只需索引到Controls集合以获取上一个和下一个兄弟节点。

答案 1 :(得分:1)

此解决方案对FlowLayoutPanel案例非常具体。因为它按照它们出现在控件集合中的顺序排列控件,所以当然要找出应该交换位置的控件的索引,然后切换它们:

private enum Direction
{
    Next,
    Previous
}

private void SwapLocations(Control current, Direction direction)
{
    if (current == null)
    {
        throw new ArgumentNullException("current");
    }
    // get the parent
    Control parent = current.Parent;
    // forward or backward?
    bool forward = direction == Direction.Next;
    // get the next control in the given direction
    Control next = parent.GetNextControl(current, forward);
    if (next == null)
    {
        // we get here, at the "end" in the given direction; we want to
        // go to the other "end"
        next = current;
        while (parent.GetNextControl(next, !forward) != null)
        {
            next = parent.GetNextControl(next, !forward);
        }
    }
    // get the indices for the current and next controls
    int nextIndex = parent.Controls.IndexOf(next);
    int currentIndex = parent.Controls.IndexOf(current);

    // swap the indices
    parent.Controls.SetChildIndex(current, nextIndex);
    parent.Controls.SetChildIndex(next, currentIndex);
}

用法示例:

private void Button_Click(object sender, EventArgs e)
{
    SwapLocations(sender as Control, Direction.Next);
}

答案 2 :(得分:0)

this.GetNextControl(Control,bool forward);

以子控件的Tab键顺序向前或向后检索下一个控件。

编辑:

使用Controls集合及其方法。

答案 3 :(得分:0)

用于进一步控制下级:

Panel.GetNextControl(currentControl,true);

要获得对上级的先前控制权:

Panel.GetNextControl(currentControl,false);

答案 4 :(得分:-2)

this.Controls.SetChildIndex(panelContainerOfHeaderAndUserControl1, 0);
this.Controls.SetChildIndex(panelContainerOfHeaderAndUserControl, 1);

这对我有用。 我在运行时创建了两个面板,但是填充样式和其他顶部的面板。 具有填充样式的面板与顶部样式重叠。

设置控件的同级顺序可以修复。