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