【问题标题】:Add Control Value before another Control value in C#在 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(...) 或...这样的功能。

【问题讨论】:

    标签: c# winforms panel flowlayoutpanel


    【解决方案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,对吗?如果是,请重新标记。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-16
        • 1970-01-01
        相关资源
        最近更新 更多