如何反转 FlowLayoutPanel?
How to reverse a FlowLayoutPanel?
我正在尝试颠倒 FlowLayoutPanel 中控件的顺序。
我尝试将 ControlCollection 转换为数组,然后将其反转并清除 ControlCollection,然后重新添加控件。但这似乎并没有达到预期的效果。
这是我使用的代码:
private static void ReverseLayout(Control control, bool suspend = true) {
if (suspend) control.SuspendLayout();
Control[] newCC = new Control[control.Controls.Count];
control.Controls.CopyTo(newCC, 0);
Array.Reverse(newCC);
control.Controls.Clear();
//control.Controls.AddRange(newCC);
for (int i = 0; i < newCC.Length; i++) {
newCC[i].Location = new System.Drawing.Point(); // maybe? no :\
newCC[i].TabIndex = i; // maybe? no :\
control.Controls.Add(newCC[i]);
}
if (suspend) control.ResumeLayout(false);
}
您的代码似乎比需要的更复杂。尝试将控件放在 List<Control>
中,然后对其调用 reverse,将集合放回去:
int firstTabIndex = flp.Controls[0].TabIndex;
List<Control> controls = flp.Controls.Cast<Control>().ToList();
flp.Controls.Clear();
controls.Reverse();
flp.Controls.AddRange(controls.ToArray());
对于 TabIndex 属性,您必须重新应用该值:
for (int i = 0; i < flp.Controls.Count; ++i) {
flp.Controls[i].TabIndex = firstTabIndex + i;
}
我正在尝试颠倒 FlowLayoutPanel 中控件的顺序。
我尝试将 ControlCollection 转换为数组,然后将其反转并清除 ControlCollection,然后重新添加控件。但这似乎并没有达到预期的效果。
这是我使用的代码:
private static void ReverseLayout(Control control, bool suspend = true) {
if (suspend) control.SuspendLayout();
Control[] newCC = new Control[control.Controls.Count];
control.Controls.CopyTo(newCC, 0);
Array.Reverse(newCC);
control.Controls.Clear();
//control.Controls.AddRange(newCC);
for (int i = 0; i < newCC.Length; i++) {
newCC[i].Location = new System.Drawing.Point(); // maybe? no :\
newCC[i].TabIndex = i; // maybe? no :\
control.Controls.Add(newCC[i]);
}
if (suspend) control.ResumeLayout(false);
}
您的代码似乎比需要的更复杂。尝试将控件放在 List<Control>
中,然后对其调用 reverse,将集合放回去:
int firstTabIndex = flp.Controls[0].TabIndex;
List<Control> controls = flp.Controls.Cast<Control>().ToList();
flp.Controls.Clear();
controls.Reverse();
flp.Controls.AddRange(controls.ToArray());
对于 TabIndex 属性,您必须重新应用该值:
for (int i = 0; i < flp.Controls.Count; ++i) {
flp.Controls[i].TabIndex = firstTabIndex + i;
}