C # Проблема удаления текстового поля из таблицы LayoutPanel - PullRequest
1 голос
/ 19 июля 2011

Здравствуйте. В настоящее время я работаю над окнами, откуда мне нужно иметь возможность добавлять и удалять несколько текстовых полей (и ярлык) одним нажатием кнопки.Я должен установить его в tableLayoutPanel, и после нажатия кнопки «Добавить» должна появиться метка, и 5 текстовых полей должны появиться в той же строке, а затем, когда я нажимаю «Удалить», они должны исчезнуть, Скрытие не будет работать, поскольку данные необходимыбыть взятым у них на более позднем этапе, но это не проблема.

Проблема в удалении (я могу добавить их, как вы увидите ниже). Я знаю, что происходит, и могу догадаться, чтопочему, но мне нужно найти альтернативное решение>. <</p>

 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);
    }


}

Все, что происходит, когда я пытаюсь удалить, - это последняя добавленная строка метки / текстовых полей, которая удаляется, а затем уменьшается только индекс строки / числалюбые часы после этого.

Любые идеи, как заставить это работать, я приму необходимость изменить его почти полностью, но, как я уже сказал, это должно быть сделано в TableLayoutPanel>. <</p>

Cheers, Jmaru7

Ответы [ 2 ]

1 голос
/ 19 июля 2011

Это работает на 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;
                }
            }
        }
    }
0 голосов
/ 19 июля 2011

Вы сохраняете только последний добавленный набор элементов управления, вы должны сохранить все из них.Теперь, когда вы удаляете последние добавленные элементы управления, при следующем удалении используется ссылка на уже удаленное, поэтому оно не будет иметь никакого эффекта.Лучше всего было бы создать некоторый класс хранения для набора элементов управления и хранить их в какой-то коллекции.

...