0

フォーム mnuForm で ShowDialog() を使用して呼び出したフォーム proFileDialog があります。特定のキーを押すと、両方のフォームを閉じたいと思います。メッセージボックスをトリガーするためにテキストボックスでこの作業を行うのに問題はなかったようですが、フォームでは何か間違ったことをしているに違いありません。Enterキーを押しても、次のコードでは何も起こりません。

    void proFileDialog_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode==Keys.Enter)
        {
            proFileDialog.Close();
            this.Close();
        }
    }

proFileDialog.KeyPreview = true を使用すると、ほとんどのキーに反応しますが、Enter キーやその他の文字/数字以外のキーには反応しません。

4

2 に答える 2

2

KeyPreviewフォームのプロパティを設定する必要があります。これを に設定すると、次Trueのように、フォームはフォーカスのあるコントロールの前にキー プレス イベントを受け取ります。

キー プレビュー プロパティ

上記のコードは、フォームのどこでも機能します。

于 2013-07-25T03:31:27.560 に答える
0

私があなたを完全に誤解していない限り、両方のフォームを閉じる方法がいくつかあります。私が考えることができる 1 つの方法は、親フォームを子フォームに渡すことです。

var pfd = new profFileDialog(this);
pfd.ShowDialog();

子フォームで:

private readonly mnuForm _parentForm;

public profFileDialog(mnuForm parentForm)
{
    _parentForm = parentForm;
    KeyPreview = true; // <-- see Simon's Answer

    // other code ...
}

次に、両方を閉じます。

private void proFileDialog_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        this.Close();
        _parentForm.Close();
    }
}

アプリケーション全体を閉じたい場合 (おそらくそうではないでしょう)、以下を使用できますApplication.Exit();

private void proFileDialog_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        Application.Exit();
    }
}

これが役立つことを願っています。

于 2013-07-25T03:45:59.647 に答える