找到控件的下一个和上一个兄弟的好方法是什么?
因此,例如,如果您的面板中包含许多按钮,文本框等。在那些你有一个用户控件,其中包含一个文本框和一个按钮。单击该按钮时,您需要查找此用户控件之后的控件名称。
我的目标是创建一个用户控件,可以将其位置与之前或之后的任何内容进行交换(如果有的话)。
我知道这应该是微不足道的,但我似乎无法绕过这一个...... = /
答案 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);
这对我有用。 我在运行时创建了两个面板,但是填充样式和其他顶部的面板。 具有填充样式的面板与顶部样式重叠。
设置控件的同级顺序可以修复。