我正在尝试创建一个用户可以在某些按钮之间进行选择的对话框,但我现在遇到的问题是当用户关闭窗口时(不是选择按钮而是使用右上角的x)角落),应用程序显示消息,但之后它崩溃了。有谁知道我在做错了什么?
MainWindow.xaml.cs
public partial class MainWindow : Window
{
string[,] suppliers = new string[3,2] {{"xxx", "xxx"}, {"yyy", "yyy"}, {"zzz" , "zzz"}};
public MainWindow()
{
InitializeComponent();
ButtonPrompt buttonPrompt = new ButtonPrompt(suppliers, "Select supplier.");
while (buttonPrompt.ShowDialog() != true)
{
MessageBox.Show("Please choose one of the suppliers!");
}
}
}
ButtonPrompt.xaml.cs:
public partial class ButtonPrompt : Window
{
public ButtonPrompt(string[,] buttons, string question)
{
InitializeComponent();
buttonStack.Children.Clear();
TextBlock questionBlock = new TextBlock();
questionBlock.Text = question;
buttonStack.Children.Add(questionBlock);
for (int i = 0; i < buttons.GetLength(0); i++)
{
Button inputButton = new Button();
inputButton.Name = buttons[i, 0];
inputButton.Content = buttons[i, 1];
inputButton.Width = 200;
inputButton.Height = 60;
inputButton.Click += inputButton_Click;
buttonStack.Children.Add(inputButton);
if (i == 0)
{
inputButton.Focus();
}
}
}
private void inputButton_Click(object sender, RoutedEventArgs e)
{
Button inputButton = (Button)sender;
this.DialogResult = true;
}
private void Window_Closed(object sender, EventArgs e)
{
this.DialogResult = false;
}
}
提前致谢!
答案 0 :(得分:3)
关闭窗口时buttonPrompt.ShowDialog()
返回true。
有关Window_Closed
引发此事件后,无法阻止窗口关闭。
这意味着你无法设置DialogResult
因为它已经是真的而你的同时不起作用。
您有三种可能性:
OnClosing
方法,以防止窗口从GUI按钮关闭。OnClosing
事件,例如http://msdn.microsoft.com/it-it/library/system.windows.window.closing.aspx检查您自己的条件并添加this.DialogResult = false
WindowStyle=None
更新:另一方面,请在主窗口初始化时暂停检查,尝试使用Loaded处理程序,这样您就可以确保主要组件在启动时没有问题。