gpt4 book ai didi

winforms - 流布局面板中控件的重新排序

转载 作者:行者123 更新时间:2023-12-03 22:53:05 29 4
gpt4 key购买 nike

我在 C# winform 应用程序中使用 flowlayoutPanel 时遇到问题。我基本上拥有的是一个包含 3 个部分的流布局面板。

第 1 节是一组 2 个控件.. 两个下拉控件,它们始终处于相同的顺序,始终在所有实例中可见

第 2 部分是一组 5 个不同的控件......基于一系列因素,5 个控件中的一个是可见的,所有其他控件的 Visible 属性都设置为 false

第 3 节是一组 3 个控件……与第 1 节一样,它们始终处于相同的顺序并且始终可见。

所以这归结为第 2 部分是可变的,其他部分是静态的。

问题来自第 2 节......当我更改任何控件的可见性时,它们看起来都很好(IE ...第 1 节然后是第 2 节然后是第 3 节)......除了当我将组合框控件设置为可见 .... 在那种情况下,并且仅在那种情况下.. 顺序变为(第 1 节,然后是第 3 节,然后是第 2 节)......我不知道什么会导致排序不同步那种情况。

我在方法开始时所做的基本上是将所有控件设置为 Visible = false ...然后我设置 Section 1 Visible = true ... 然后遍历 Section 2 的条件并设置适当的控件 Visible = true 最后设置第 3 节控件 Visible = true。

有没有人对流布局面板控件排序有任何经验?我无法弄清楚 ComboBox 发生了什么。

最佳答案

FlowLayoutPanel.Controls是一个名为 SetChildIndex(Control c, int index) 的方法函数它允许您将对象设置为特定索引。

由于 FlowLayoutPanel 使用控件的索引来确定绘制它们的顺序,因此您可以将其设置为要与之交换的任何控件的索引,它会将控件索引向上增加 1,然后再增加一个。

这是我的 blog 的片段在 FlowLayoutPanel 中重新排序 PictureBoxes。

在名为 flowLayoutPanel1 的 WinForm 上添加 FlowLayoutPanel :

public partial class TestForm: Form
{
public TestForm()
{
InitializeComponent();
this.flowLayoutPanel1.AllowDrop = true
}

private void AddImageToBlog(System.Drawing.Image image)
{
PictureBox pbox = new PictureBox();
pbox.SizeMode = PictureBoxSizeMode.Zoom;
pbox.Height = (_picturebox_height * _ScaleFactor);
pbox.Width = (_picturebox_width * _ScaleFactor);
pbox.Visible = true;
pbox.Image = image;

pbox.MouseDown += new MouseEventHandler(pbox_MouseDown);
pbox.DragOver += new DragEventHandler(pbox_DragOver);
pbox.AllowDrop = true;
flpNewBlog.Controls.Add(pbox);
}

void pbox_DragOver(object sender, DragEventArgs e)
{
base.OnDragOver(e);
// is another dragable
if (e.Data.GetData(typeof(PictureBox)) != null)
{
FlowLayoutPanel p = (FlowLayoutPanel)(sender as PictureBox).Parent;
//Current Position
int myIndex = p.Controls.GetChildIndex((sender as PictureBox));

//Dragged to control to location of next picturebox
PictureBox q = (PictureBox) e.Data.GetData(typeof(PictureBox));
p.Controls.SetChildIndex(q, myIndex);
}
}

void pbox_MouseDown(object sender, MouseEventArgs e)
{
base.OnMouseDown(e);
DoDragDrop(sender, DragDropEffects.All);
}
}

关于winforms - 流布局面板中控件的重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425867/

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