在 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# 中的另一个控件值之前添加控件值的主要内容,如果未能解决你的问题,请参考以下文章

C# winform动态添加控件获取值问题

C#如何让控件一直在窗体中间显示

C# winform动态添加控件获取值问题

如何在一个DataGridView中的一列添加DateTimePicker控件 C#

C# winform 的listView控件如何将单元格写入值

C#中如何在一个窗体中调用另一个窗体控件中的数据?