Почему моя форма все еще добавляет элемент в список, когда он закрыт?

1

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

Это мой код для кнопки в форме1:

    private void button1_Click(object sender, EventArgs e)
    {
        // if there is less than items in the list, load the form
        if (addTask.Count < 10)
        {
            // New instance to load the form
            newTaskForm frm2 = new newTaskForm();
            frm2.ShowDialog();
            NewTask task = new NewTask();

                // Get the values entered by the user, eg title will be the text in textBox1 etc.
                task.title = frm2.textBox1.Text;
                task.description = frm2.textBox2.Text;
                try
                {
                    task.priority = frm2.comboBox1.SelectedItem.ToString();
                }
                catch
                {
                }
                task.completionDate = frm2.dateTimePicker1.Value.ToString();
                addTask.Add(task); // Add task to the list
                listView1.Items.Add(task.title); // Display task title in the list view

                // close form
                frm2.Close();
                frm2.Dispose();

            }            

        // if there are 10 items in the list, display a message
        else
        {
            MessageBox.Show("Maximum number of tasks added");
        }
    }

Тогда это код второй моей формы, в которую пользователь вводит данные.

  private void button1_Click(object sender, EventArgs e)
  {
      // check to see if all the fields have been filled in properly
      if (string.IsNullOrWhiteSpace(textBox1.Text) || string.IsNullOrWhiteSpace(textBox2.Text) || comboBox1.SelectedItem == null)
      {
          DialogResult = DialogResult.None; // do not send results back to main form
          MessageBox.Show("Please fill in all fields");
      }
      else
      {
          DialogResult = DialogResult.OK;
      }
  }

Я просто не понимаю, что, когда я нажимаю Red X, чтобы закрыть вторую форму, он добавляет пустой список в список /listview?

Теги:
winforms
listview

1 ответ

4
Лучший ответ

вы не проверяете DialogResult из ShowDialog():

newTaskForm frm2 = new newTaskForm();
if (frm2.ShowDialog() != DialogResult.OK)
   return;
NewTask task = new NewTask();

или

newTaskForm frm2 = new newTaskForm();
DialogResult res = frm2.ShowDialog();
if (res != DialogResult.OK)
   return;
NewTask task = new NewTask();

Я предлагаю сделать улучшение в newTaskForm:

private void button1_Click(object sender, EventArgs e)
{
  // check to see if all the fields have been filled in properly
  if (string.IsNullOrWhiteSpace(textBox1.Text) || string.IsNullOrWhiteSpace(textBox2.Text) || comboBox1.SelectedItem == null)
  {
      MessageBox.Show("Please fill in all fields");
  }
  else
  {
      DialogResult = DialogResult.OK;
      Close();
  }
}
  • 0
    Спасибо! Первоначально у меня был этот код на месте, и я просто помню, почему я его удалил. Он «обновляет» мою форму, поэтому мне нужно дважды нажать кнопку закрытия, прежде чем она закроется. То же самое, когда я добавляю новый элемент в список. Почему это вызывает это?
  • 0
    @ Jamie1234, form.ShowDialog () просто показывает форму и делает ее модальной. Это не может отменить закрытие. Есть ли у вас обработчик события FormClosing во 2-й форме? это может быть источником проблем. также я бы изменил button1_click (см. обновление)
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню