C#从tableLayoutPanel中删除文本框时出现问题

时间:2011-07-19 11:30:08

标签: c# text tablelayoutpanel

您好我正在开发一个窗口,我需要能够通过单击按钮添加和删除多个文本框(以及一个标签)。 我必须在tableLayoutPanel中设置它并且一旦“Add”被点击一个Label并且5个文本框必须出现在同一行上,然后当我点击“删除”时它们必须消失,隐藏将无法工作,因为数据需要在稍后阶段被从他们身上带走,但那不是问题。

问题在于删除(我可以添加它们,如下所示)我知道发生了什么,可以猜测为什么但我需要找到替代解决方案>。<

 public partial class Form2 : Form
 {
    int Count = 1;
    int rowIndex = 2, colIndex = 1;
    Label Label;
    TextBox Value;
    TextBox Weight;
    TextBox Width;
    TextBox Height;
    TextBox Length;

 private void button1_Click(object sender, EventArgs e)
    {
        if (Count <= 9)
        {
            Count += 1;
            rowIndex += 1;
            tableLayoutPanel10.RowCount = +1;
            AddLot(Count);
            if (Count > 9)
                button1.Enabled = false;
        }

        button2.Enabled = true;

    }

    private void button2_Click(object sender, EventArgs e)
    {


        if (Count == 2)
        {
            tableLayoutPanel10.Controls.Remove(Label);
            tableLayoutPanel10.Controls.Remove(Value);
            tableLayoutPanel10.Controls.Remove(Weight);
            tableLayoutPanel10.Controls.Remove(Width);
            tableLayoutPanel10.Controls.Remove(Height);
            tableLayoutPanel10.Controls.Remove(Length);
            Count -= 1;
            rowIndex -= 1;
            button2.Enabled = false;
        }
        else
        {
            tableLayoutPanel10.Controls.Remove(Label);
            tableLayoutPanel10.Controls.Remove(Value);
            tableLayoutPanel10.Controls.Remove(Weight);
            tableLayoutPanel10.Controls.Remove(Width);
            tableLayoutPanel10.Controls.Remove(Height);
            tableLayoutPanel10.Controls.Remove(Length);
            Count -= 1;
            rowIndex -= 1;
            button1.Enabled = true;
        }


    }

    private void AddLot(int Count)
    {

        Label = new Label();
        Label.Dock = DockStyle.Fill;
        Label.Text = Count.ToString();
        Label.TextAlign = System.Drawing.ContentAlignment.MiddleRight;

        Value = new TextBox();
        Value.Dock = DockStyle.Fill;

        Weight = new TextBox();
        Weight.Dock = DockStyle.Fill;

        Width = new TextBox();
        Width.Dock = DockStyle.Fill;

        Height = new TextBox();
        Height.Dock = DockStyle.Fill;

        Length = new TextBox();
        Length.Dock = DockStyle.Fill;

        tableLayoutPanel10.Controls.Add(Label, colIndex - 1, rowIndex);
        tableLayoutPanel10.Controls.Add(Value, colIndex, rowIndex);
        tableLayoutPanel10.Controls.Add(Weight, colIndex + 1, rowIndex);
        tableLayoutPanel10.Controls.Add(Width, colIndex + 2, rowIndex);
        tableLayoutPanel10.Controls.Add(Height, colIndex + 3, rowIndex);
        tableLayoutPanel10.Controls.Add(Length, colIndex + 4, rowIndex);
    }


}

当我尝试删除时发生的所有事情是删除标签/文本框的最后添加的行,然后在任何时钟之后只有rowindex / count减少。

任何想法如何让它发挥作用,我接受必须几乎完全改变它,但正如我所说,它必须在TableLayoutPanel&gt;中完成。&lt;

干杯, Jmaru7

2 个答案:

答案 0 :(得分:1)

这对我来说是100%的工作,我花了一个小时来处理它:

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            tableLayoutPanel1.RowCount = 1;
            tableLayoutPanel1.ColumnCount = 6;
            removeButton.Enabled = false;
        }

         private void addButton_Click(object sender, EventArgs e)
        {
            int index = tableLayoutPanel1.RowCount - 1;
            Label label = new Label();
            TextBox Value = new TextBox();
            TextBox Weight = new TextBox();
            TextBox Width = new TextBox();
            TextBox Height = new TextBox();
            TextBox Length = new TextBox();

            label.Dock = DockStyle.Fill;
            label.Text = (index + 1).ToString();
            label.TextAlign = System.Drawing.ContentAlignment.MiddleRight;

            Value.Dock = DockStyle.Fill;

            Weight.Dock = DockStyle.Fill;

            Width.Dock = DockStyle.Fill;

            Height.Dock = DockStyle.Fill;

            Length.Dock = DockStyle.Fill;

            int i = 0;
            tableLayoutPanel1.Controls.Add(label, i++, index);
            tableLayoutPanel1.Controls.Add(Value, i++, index);
            tableLayoutPanel1.Controls.Add(Weight, i++, index);
            tableLayoutPanel1.Controls.Add(Width, i++, index);
            tableLayoutPanel1.Controls.Add(Height, i++, index);
            tableLayoutPanel1.Controls.Add(Length, i++, index);

            tableLayoutPanel1.RowCount += 1;

            if (tableLayoutPanel1.RowCount > 9)
            {
                addButton.Enabled = false;
            }

            if (tableLayoutPanel1.RowCount > 0)
            {
                removeButton.Enabled = true;
            }
        }

        private void removeButton_Click(object sender, EventArgs e)
        {
            if (tableLayoutPanel1.RowCount > 0)
            {
                int startIndex = ((tableLayoutPanel1.RowCount - 1) * 6) - 1;

                for (int i = 0; i < 6; i++)
                {
                    tableLayoutPanel1.Controls.RemoveAt(startIndex--);
                }

                tableLayoutPanel1.RowCount -= 1;

                if (tableLayoutPanel1.RowCount == 0)
                {
                    removeButton.Enabled = false;
                }

                if (tableLayoutPanel1.RowCount <= 9)
                {
                    addButton.Enabled = true;
                }
            }
        }
    }

答案 1 :(得分:0)

您只保留最后添加的一组控件,您应该保留所有这些控件。现在,当您删除最后添加的控件时,下一次删除使用已删除的引用,因此它不会产生任何影响。 最好是为控件集制作一些存储类,并将它们保存在某种集合中。