Реализовать две версии события закрытия окна в одной форме ? C#

#c# #wpf

#c# #wpf

Вопрос:

У меня есть два окна формы 1, форма 2

  • Форма 1 — это начальное окно, которое содержит nextButton и Datagrid с DataGridCheckBoxColumn .
  • Форма 2 — это второе окно, которое содержит две кнопки .

Сценарий заключается в том, что пользователь проверяет одну или несколько строк в DataGrid и нажимает на nextButton. это покажет первое окно формы 2, которое содержит окно информации о клиенте первой строки в Datagrid формы 1 и две кнопки ( NextClient и finish ), здесь есть две возможности ,

  • Во-первых, он проверит и нажмет на Next, это покажет следующее окно следующей строки (клиента), выбранной им (путем проверки) в datagrid формы 1. (работает отлично)
  • Второй он проверит информацию о пользователе и нажмет кнопку готово, когда он нажмет кнопку готово, окно должно быть закрыто, и в нем не должно отображаться какое-либо другое новое окно, даже если он проверил много строк в первой таблице данных формы 1. (Не работает)

форма 1 :

// Закрытие окна формы 2

  private void Window_Closing(object sender, EventArgs e)
        {
// list grid count is the number of the list of the checked rows by the user

            compteur  ;
            if (compteur < listgrid.Count)
            {
                
                Form2 form2 = new Form2();     
                Form2.Closing  = new System.ComponentModel.CancelEventHandler(Window_Closing);
                Form2.Show();

            }
            if (compteur == listgrid.Count)
            {

                nextBtn.IsEnabled = true;
                ClientGrid.IsEnabled = true;
            }
  

// форма 2

     private void btn_Cancel(object sender, RoutedEventArgs e)
    {
        this.Close();
      
    }
  

Возможно ли создать две версии события закрытия окна в одной форме?

Комментарии:

1. У вас есть две кнопки. Два события щелчка. И вам нужны два разных фрагмента кода. Они оба могут закрыть свое окно, но, вероятно, это не событие закрытия окна, на которое вам следует обратить внимание.

Ответ №1:

Если я правильно понял, то вы хотите вызвать два Close события при закрытии формы. И если это так, то это довольно легко реализовать.

 public partial class ShellView : Window
{
    public ShellView()
    {
        InitializeComponent();
        this.Closed  = OnClosed;
        this.Closed  = OnClosed2;
    }

    private void OnClosed2(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

    private void OnClosed(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }
}  
  

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

Комментарии:

1. Спасибо, я нашел решение, но я поддержал ваше решение, потому что оно может быть принято как решение

2. Значит, это не совсем то, что вы хотели?

3. Нет, это то, что я хотел, но я нашел другое решение (с другим подходом)

4. Спасибо, я сейчас опубликую свое решение

Ответ №2:

Я устранил проблему, создав переменную с именем test в форме 2

 // form 2
test= false;
   private void btn_Cancel(object sender, RoutedEventArgs e)
    {
        this.test = true;
        this.Close();
      
    }
  
 


// Called the test variable in form 1
 private void Window_Closing(object sender, EventArgs e)
        {
            if (form2.test == true)
            {
                form2.Closing  = new System.ComponentModel.CancelEventHandler(Window_Closing);
                nextBtn.IsEnabled = true;
                ClientGrid.IsEnabled = true;
            }
            else { 

            compteur  ;

            if  (compteur < listgrid.Count)
            {
                    form2 = new Form2();
                    form2.Closing  = new System.ComponentModel.CancelEventHandler(Window_Closing);
                    form2.Show();

            }