C # WPF окно вопроса - PullRequest
       2

C # WPF окно вопроса

0 голосов
/ 19 ноября 2018

В настоящее время возникает проблема с открытием нового окна wpf. Текущая программа устанавливает логическое значение с подтверждением «false», затем программа открывает новое окно и передает идентификатор в новое окно, где пользователю будет предложено нажать кнопку «Да», если он может подтвердить, что идентификатор является его идентификатором (если это так, логическое значение установлено в true) или нет, если идентификатор не является их идентификатором (в этом случае логическое значение снова устанавливается в false). Новое окно закроется и вернется к обычному окну с новым значением логического значения. Затем выполняется оператор if для проверки значения логического значения, если false, то пользователю отображается сообщение, если true, тогда клиент перемещается в новое окно.

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

Код для открытия нового окна и логическая проверка

bool confirmed == false;
int id = 1;
promptWindow = new promptWindow(id, confirmed);

код для нового окна

public(int id, bool confirmed)
{
    InitializeComponent(); 
}

private void btnYes_Click(object sender, RoutedEventArgs e)
{
    //confirms the user wants to book and returns value
    bool confirmation = true;
    return confirmation;
    this.Close; 
}

private void btnNo_Click(object sender, RoutedEventArgs e)
{
    //confirms the user doesn't want to book and returns value
    bool confirmation = false;
    this.Close();
}

Код для проверки логического значения

if (confirmation == true)
{
    //adds new customer to customer as they have confirmed booking
    add.list(id);
}
else
{
     MessageBox.Show("Booking not added");
}

1 Ответ

0 голосов
/ 19 ноября 2018

Вы должны использовать events или ShowDialog().

bool confirmed = false;
int id = 1;
promptWindow = new promptWindow(id, confirmed);
bool result = promptWindow.ShowDialog();

if (result)
{
    // confirm
}
else
{
    // not confirmed
}

И ваше окно

public(int id, bool confirmed)
{
    InitializeComponent(); 
}

private void btnYes_Click(object sender, RoutedEventArgs e)
{
    DialogResult = true;
}

private void btnNo_Click(object sender, RoutedEventArgs e)
{
    DialogResult = false;
}

Функция Window.ShowDialog() будет ожидать закрытия окна.Это означает, что ваш код будет ждать в строке ShowDialog(), и вы можете проверить результат.Функция Window.Show() открывает окно и продолжает ваш код.

Другой способ - это события: объявляйте что-то подобное в вашем Окне

public event EventHandler<int> OnConfirmButton;
public event EventHandler<int> OnCancelButton;

На ваших кнопках:

private void btnYes_Click(object sender, RoutedEventArgs e)
{
    OnConfirmButton?.Invoke(this, this.id);
}

private void btnNo_Click(object sender, RoutedEventArgs e)
{
    OnCancelButton?.Invoke(this, this.id);
}

И вы можете подписаться на ваш звонок:

bool confirmed = false;
int id = 1;
promptWindow = new promptWindow(id, confirmed);
promptWindow.OnConfirmButton += (sender, id) =>
{
    // do something when confirm
};

promptWindow.OnCancelButton += (sender, id) =>
{
    // do something when cancel
}

promptWindow.Show();

Значение id в аргументе равно идентификатору, открывшему окно.Это всего лишь пример.На самом деле вам не нужно events в этом случае, потому что вам просто нужен результат окна.Но вы можете использовать в других случаях, просто следуйте примеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...