проверить состояние и удалить динамические элементы управления соответственно c # - PullRequest
0 голосов
/ 30 июня 2018

У меня есть выпадающий список со значениями 4-9, и в соответствии с этим значением я хочу генерировать метки времени выполнения и текстовые поля. Когда я нажимаю на 6, тогда код может генерировать 6 ярлыков и текстовых полей по мере необходимости, но когда я нажимаю на 5 снова, одна метка и текстовое поле должны исчезнуть, или если я нажимаю на 4 снова, 2 ярлыки и текстовые поля должны исчезнуть .... что не является происходит. У меня есть этот код в C #. Какие изменения я должен сделать в этом коде? Есть ли другой способ, которым я могу сделать этот код?

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   if (comboBox1.Text == "4")
   {
      checkBox1.Visible = true;
      for (int i = 0; i < 4; i++)
      {
         addlabel(i);
      }

      for (int i1 = 0; i1 < 4; i1++)
      {
         addlabel1(i1);
      }

   }
   if (comboBox1.Text == "5")
   {
      checkBox1.Visible = true;
      for (int i = 0; i < 5; i++)
      {
         addlabel(i);

      }

      for (int i1 = 0; i1 < 5; i1++)
      {
         addlabel1(i1);
      }

   }
   if (comboBox1.Text == "6")
   {
      checkBox1.Visible = true;
      for (int i = 0; i < 6; i++)
      {
         addlabel(i);

      }

      for (int i1 = 0; i1 < 6; i1++)
      {
         addlabel1(i1);
      }

   }
}
void addlabel(int i)
{

   int left = 70;
   int top = 100;
   int step_x = 80;
   int step_y = 30;

   new Label()
   {
      Name = $"label{i}",
      Text = "Enter Subject:",

      Location = new Point(left, top + step_y * i),
      Parent = this,
   };
   left += step_x;

   int left1 = 357;
   int top1 = 100;
   int step_x1 = 80;
   int step_y1 = 30;

   new Label()
   {
      Name = $"label{i}",
      Text = "Total Marks:",

      Location = new Point(left1, top1 + step_y1 * i),
      Parent = this,
   };


   left1 += step_x1;
}


void addlabel1(int i1)
{

   int left = 200;
   int top = 100;
   int step_x = 80;
   int step_y = 30;

   new TextBox()
   {
      Name = $"textbox{i1}",
      Text = "",
      Size = new Size(122, 20),
      Location = new Point(left, top + step_y * i1),
      Parent = this,
   };


   left += step_x;

   int left1 = 480;
   int top1 = 100;
   int step_x1 = 80;
   int step_y1 = 30;
   new TextBox()
   {
      Name = $"textbox{i1}",
      Text = "",
      Size = new Size(122, 20),
      Location = new Point(left1, top1 + step_y1 * i1),
      Parent = this,
   };

   left1 += step_x1;

}

Есть предложения? Помоги мне.

1 Ответ

0 голосов
/ 30 июня 2018

Попробуйте следующий код:

public partial class Form1 : Form
{
    private int prev = 0;
    private Point lblLocation = new Point(70, 100);
    private Point tbLocation = new Point(170, 100);

    public Form1()
    {
        InitializeComponent();
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int cur = Convert.ToInt32(comboBox1.SelectedItem);
        int tmp = cur - prev;

        if (tmp > 0)
        {
            // add new controls
            for (int i = 1; i <= tmp; i++)
            {
                AddLabel(prev + i);
                AddTextBox(prev + i);
                lblLocation.Y += 30;
                tbLocation.Y += 30;
            }
            prev = cur;
        }
        else
        {
            // remove controls
            tmp = Math.Abs(tmp);
            for(int i= 0; i < tmp; i++)
            {
                RemoveControl($"lbl{prev}");
                RemoveControl($"tb{prev}");
                lblLocation.Y -= 30;
                tbLocation.Y -= 30;
                prev--;
            }
        }
    }

    private void AddLabel(int i)
    {
        new Label()
        {
            Name = $"lbl{i}",
            Text = $"lbl{i}",

            Location = lblLocation,
            Parent = this
        };
    }

    private void AddTextBox(int i)
    {
        new TextBox()
        {
            Name = $"tb{i}",
            Text = $"tb{i}",

            Location = tbLocation,
            Parent = this
        };
    }

    private void RemoveControl(string name)
    {
        foreach (Control item in Controls.OfType<Control>())
        {
            if (item.Name == name)
            {
                Controls.Remove(item);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...