在 C# 中的另一个控件值之前添加控件值
Posted
技术标签:
【中文标题】在 C# 中的另一个控件值之前添加控件值【英文标题】:Add Control Value before another Control value in C# 【发布时间】:2012-05-18 00:31:33 【问题描述】:我有一个“FlowLayoutPanel”,想给它添加一系列“UserControl”:
mainPanel.Controls.Add(fx);
在旧用户控件之后添加的每个新用户控件,我想在添加的前一个用户控件之前添加新用户控件,我该怎么做?我没有找到像mainPanel.Controls.AddAt(...)
或mainPanel.Controls.Add(index i, Control c)
或mainPanel.Controls.sort(...)
或...这样的功能。
【问题讨论】:
【参考方案1】:这样的东西会按字母顺序添加一个控件。
FlowLayoutPanel flowLayoutPanel = ...; // this is the flow panel
Control control = ...; // this is the control you want to add in alpha order.
flowLayoutPanel.SuspendLayout();
flowLayoutPanel.Controls.Add(control);
// sort it alphabetically
for (int i = 0; i < flowLayoutPanel.Controls.Count; i++)
var otherControl = flowLayoutPanel.Controls[i];
if (otherControl != null && string.Compare(otherControl.Name, control.Name) > 0)
flowLayoutPanel.Controls.SetChildIndex(control, i);
break;
flowLayoutPanel.ResumeLayout();
【讨论】:
【参考方案2】:您想更改 flowdirection 属性,以便将最新添加的控件添加到顶部
flowLayoutPanel1.FlowDirection = FlowDirection.BottomUp;
或者你可以
Label label1 = new Label();
flowLayoutPanel1.Controls.Add(label1);
label1.BringToFront();
【讨论】:
如果我改变流向我的问题没有解决,它只是从右到左而不是从左到右添加,但仍然在旧 userControl 之后添加 但是如果它是从左到右添加的,它不会像最旧的控件一样布局最右边最新的控件到最左边吗? 对不起,我的第二个选项倒退了...我有 SendToBack 应该是 BringToFront【参考方案3】:您可以使用SetChildIndex 方法。类似的东西(也许你需要摆弄这些不雅行为):
var prevIndex = mainPanel.Controls.IndexOf(previouslyAdded)
mainPanel.Controls.Add(fx);
mainPanel.Controls.SetChildIndex(fx, prevIndex);
【讨论】:
【参考方案4】:纠正自己:myPanel.Controls.AddAt(index, myControl)
【讨论】:
不,没有这种方法,我们只有 Add()。 没关系,我在考虑 ASP.NET WebForms。我认为您正在处理 WPF,对吗?如果是,请重新标记。以上是关于在 C# 中的另一个控件值之前添加控件值的主要内容,如果未能解决你的问题,请参考以下文章
如何在一个DataGridView中的一列添加DateTimePicker控件 C#