【问题标题】:C# TableLayoutPanel replace control?C# TableLayoutPanel 替换控件?
【发布时间】:2014-12-16 08:05:39
【问题描述】:

我想知道是否可以在运行时将 TableLayoutPanel 中的一个控件替换为另一个控件。我有一个组合框和一个按钮,它们在运行时动态添加到 TableLayoutPanel,当用户在组合框中选择一个项目并点击按钮时,我想用包含文本的标签替换组合框选定的组合框项目。

基本上,如果我可以简单地删除控件并在它的索引处插入另一个控件,那对我有用。但是,我在 TableLayoutPanel 的 Controls 集合上没有看到像“splice”或“insert”这样的选项,我想知道是否有一种简单的方法可以在特定索引处插入控件。提前致谢。

【问题讨论】:

    标签: c#-4.0 controls replace tablelayoutpanel


    【解决方案1】:

    通过使用我想要交换的两个控件填充面板并将其放入 TableLayoutPanel 来解决此问题。然后我根据我想在什么时间看到的设置它们的可见性。

    【讨论】:

    • 你怎么不能去:tableLayoutPanel.Controls.RemoveByKey(oldChild); tableLayoutPanel.Controls.Add(newChild, y, x);
    【解决方案2】:

    这是我能够想出的我需要的东西。它获取 ComboBox 的位置并使用选定的值创建一个新标签。

        // Replaces a drop down menu with a label of the same value
        private void lockDropMenu(ComboBox dropControl)
        {
            TableLayoutPanelCellPosition pos = myTable.GetCellPosition(dropControl);
            Label lblValue = new Label();
            myTable.Controls.Remove(dropControl);
            if (dropControl.SelectedItem != null)
            {
                lblValue.Text = dropControl.SelectedItem.ToString();
                lblValue.Font = lblValue.Font = dropControl.Font;
                // Just my preferred formatting
                lblValue.AutoSize = true;
                lblValue.Dock = System.Windows.Forms.DockStyle.Fill;
                lblValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
    
                myTable.Controls.Add(lblValue, pos.Column, pos.Row);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多