【问题标题】:Resize on the key firing在按键触发时调整大小
【发布时间】:2019-04-09 20:32:55
【问题描述】:

我有一个继承 Form 类的经典 Form1 类。 问题是我按下按钮并没有触发任何事件。
在 Form1 内部有一个 webBrowser,它占据了整个 Form1。

这是我的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        WindowState = FormWindowState.Maximized;
        KeyPreview = true;
        PreviewKeyDown += wb_PreviewKeyDown; 
    }

     private void wb_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        Console.WriteLine("EDOOOOOOOOO");   
        if (e.Control && e.KeyCode == Keys.C)
        {
            // Do something funny!
        }
    }
}

无论我按下什么按钮,wb_PreviewKeyDown 都不会触发。

【问题讨论】:

  • 使用按钮点击事件而不是 keydown
  • 该代码按预期工作,前提是您将它​​放在 Form 派生类中并调用 Show/ShowDialog 方法
  • 当然,KeyDown 事件是针对键盘的,而不是针对按钮的
  • 你确定Form1在你按下键盘的时候有焦点吗?
  • 您之前应该提到您在该表单上使用了WebBrowser。在那种情况下,Form1 永远不会得到 keydown,因为WebBrowser 会吃掉任何消息。

标签: c# .net winforms


【解决方案1】:

如果您在表单上按下一个键,该事件将被触发。
但是,如果您在表单上有一个 TextBox 或其他东西,并且您在其上按下一个键,则该事件不会触发,因为现在 TextBox 已收到输入。

这可以通过在表单上设置属性KeyPreview = true 轻松解决。
您可以在设计器或代码中设置它(参见@Isma 的答案)

编辑: 由于您的表单上有一个WebBrowser 控件,因此您需要做一些不同的事情,请参阅此Handling key events on WebBrowser control

它涉及使用WebBrowserPreviewKeyDown 事件

【讨论】:

  • 这对我有用,如果这对你不起作用,那么一定有其他代码可以破坏它。你能给我们提供一个最小的代码示例吗?
  • 事件不会再次触发:/ .
  • 你修改过你的代码吗?在这种情况下,请更新您的问题并向我们展示您的新代码
  • 我在这里找到了解决方案 stackoverflow.com/questions/39252444/… 在哪里可以写?在问题中?
  • 你可以回答自己的问题,这样可以帮助其他有同样问题的人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 2022-01-14
  • 2018-11-26
相关资源
最近更新 更多