2011-07-19 4 views
1

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

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

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


} 

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

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

Приветствия, Jmaru7

+0

ROWCOUNT = +1 ??? –

+0

ах, опечатка. но это также остатки чего-то, что я пробовал раньше, ничего не меняет LOL – Jmaru7

ответ

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; 
       } 
      } 
     } 
    } 
+0

, даже после этого я, кажется, только получаю 1 строку, которая движется вниз ... не знаю, что сейчас не так. < – Jmaru7

+0

Я отредактировал мой ответ, это должно работать – AlaaL

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^