0

ユーザーがいくつかのボタンから選択できるダイアログを作成しようとしていますが、現在発生している問題は、ユーザーがウィンドウを閉じるとき (ボタンを選択するのではなく、右上隅の 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!");
        }

    }
}

ボタンプロンプト.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;
    }
}

前もって感謝します!

4

1 に答える 1

3

buttonPrompt.ShowDialog()Window が閉じている場合、 は true を返します。ドキュメンテーションは、Window_Closed

このイベントが発生すると、ウィンドウが閉じるのを防ぐことはできません。

DialogResultこれは、すでに true であり、 while が機能しないため、を設定できないことを意味します。

次の 3 つの可能性があります。

  1. How to override default window close operation?OnClosingのようにメソッドをオーバーライドします。ウィンドウが GUI ボタン​​から閉じられないようにします。
  2. (私のお気に入り) http://msdn.microsoft.com/it-it/library/system.windows.window.closing.aspxOnClosingのようにイベントをオーバーライドして、独自の条件をチェックし、追加しますthis.DialogResult = false
  3. XAML設定からダイアログウィンドウの閉じるボタンを非表示にしますWindowStyle=None

更新: 反対側では、メイン ウィンドウの初期化から while チェックアウトを行い、Loaded ハンドラーを試して、メイン コンポーネントが起動中に問題を抱えていないことを確認してください。

于 2013-05-06T10:10:58.193 に答える