gpt4 book ai didi

C#:如何交换两个winform控件的位置

转载 作者:太空狗 更新时间:2023-10-29 23:11:49 26 4
gpt4 key购买 nike

假设您有两个 Control,Alice 和 Bob,您想要交换他们的位置。我的意思是在交换之后:

  • 如果他们住在同一个 ControlCollection 中,Alice 应该有 Bob 的索引,反之亦然。
  • 如果在不同的 ControlCollection 中,Alice 应该与 Bob 具有相同的索引,但在 Bob 的 ControlCollection 中,反之亦然。

你会怎么做?由于 ControlCollection 方法的工作原理,我有点不确定如何最好地解决这个问题。例如,使用 Remove 方法删除控件将更改集合中所有在它之后的控件的索引。 SetChildIndex 的工作方式类似。

编辑: Alice和Bob的父控件是流式布局面板。这就是为什么我想交换它们的索引,这实际上会交换它们在流布局面板中的位置。

最佳答案

对于简单的情况,两个控件都在同一个 FlowLayoutPanel 上,使用 SetChildIndex Controls 上的方法。

像这样的……

var alphaIndex = panel.Controls.IndexOf(controlAlpha);
var betaIndex = panel.Controls.IndexOf(controlBeta);
panel.Controls.SetChildIndex(controlAlpha, betaIndex);
panel.Controls.SetChildIndex(controlBeta, alphaIndex);

注意:我在这里没有正确处理顺序 - 您需要先将较早的控件放置到位,否则当第二个控件移到它前面时,生成的索引将太高。但这是对读者的练习。

对于更复杂的情况,控件位于不同的 FlowLayoutPanel 上,代码更简单(顺序无关紧要)和更复杂(每个控件需要从一个面板并添加到另一个)。

关于C#:如何交换两个winform控件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1361341/

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