C#wpf窗口问题



当前在打开新的wpf窗口时遇到问题。当前程序将一个名为confirmed的布尔值设置为false,然后该程序打开一个新窗口,并将一个ID传递给新窗口,如果用户可以确认ID是他们的ID(如果是,则布尔值被设置为true(,则会提示用户单击"是"按钮;如果ID不是他们的ID,则会提醒用户单击"否"按钮(如果是的话,则将布尔值再次设置为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");
}

您应该使用eventsShowDialog()

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()打开窗口并继续执行代码。

另一种方式是事件:在Window 上声明类似的内容

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

arg上的id等于打开窗口的id。这只是一个例子。实际上,在这种情况下,您不需要events,因为您只需要窗口的结果。但是您可以在其他情况下使用,只需遵循示例即可。

最新更新