gpt4 book ai didi

C#:查找下一个和上一个同级控件的好方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:11 24 4
gpt4 key购买 nike

查找控件的下一个和 previous sibling 姐妹的好方法是什么?

例如,如果您有一个包含许多按钮、文本框等的面板。在其中的某个地方,您有一个用户控件,它由一个文本框和一个按钮组成。例如,当单击按钮时,您想要查找此用户控件之后的控件名称。

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

我知道这应该有点微不足道,但我似乎无法全神贯注...=/

最佳答案

此解决方案非常适合 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);
}

关于C#:查找下一个和上一个同级控件的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1360979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com