C# 我希望只能使用Alt+;F4在表单应用程序的WebBrowser中禁用快捷键时

C# 我希望只能使用Alt+;F4在表单应用程序的WebBrowser中禁用快捷键时,c#,.net,winforms,C#,.net,Winforms,如下面的代码所示,当WebBrowser被放置在子窗口中并且焦点在子窗口中的WebBrowser上时,我只想用Alt+F4关闭子窗口,但不知何故父窗体也被关闭。 为什么会发生这种情况 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; us

如下面的代码所示,当WebBrowser被放置在子窗口中并且焦点在子窗口中的WebBrowser上时,我只想用Alt+F4关闭子窗口,但不知何故父窗体也被关闭。 为什么会发生这种情况

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            var f2 = new Form2();
            f2.Show();
        }
    }

    public class Form2 : Form
    {
        public Form2()
        {
            var webBrowser1 = new WebBrowser();
            webBrowser1.Dock = DockStyle.Fill;
            webBrowser1.WebBrowserShortcutsEnabled = false;
            Controls.Add(webBrowser1);

            webBrowser1.PreviewKeyDown += (sender, e) =>
            {
                if (e.Alt && e.KeyCode == Keys.F4)
                    Close();
            };

            webBrowser1.DocumentText = "test";
        }
    }
}

您可以在不调用
Close
的情况下将按键标记为input key,然后它将关闭当前窗口:

webBrowser1.PreviewKeyDown += (sender, e) =>
{
    if (e.Alt && e.KeyCode == Keys.F4)
    {
        e.IsInputKey = true;
    }
};

您可以简单地删除该代码。如果在不抑制按键的情况下调用
Close()
,它将冒泡到之后激活的窗体
ALT+F4
已经自动关闭了当前窗口。@ssa2不要错过Jimi关于根本原因的解释。是的,先生。另外,我把“&&”拼错为“&”。