0

我有这个代码:

private void button5_Click(object sender, EventArgs e)
{
    Magnifier20070401.MagnifierForm mf = new Magnifier20070401.MagnifierForm();
    mf.Show();
}

它正确显示了目标表单。但是我不想使用按钮单击,而是想使用Ctrl+M来显示此表单。如果用户Ctrl+M再次输入,我想关闭表单。

我怎样才能做到这一点?

编辑:

这就是我所做的工作:

private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode.ToString() == "M")
            {
                Magnifier20070401.MagnifierForm mf = new Magnifier20070401.MagnifierForm();
                mf.Show();
            }
        }

在 Form1 的构造函数中,我添加了:

this.KeyPreview = true;

所以现在当我点击 Ctrl+M 时,我看到了新的表单。我现在需要的是如何做到这一点,如果我再次点击 Ctrl+M 它将关闭新表单。也许使用标志?

编辑:

这就是我现在所做的:

private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode.ToString() == "M")
            {

                    if (mf == null)
                    {
                        mf = new Magnifier20070401.MagnifierForm();
                        mf.Show();
                    }
                    else
                    {
                        mf.Close();
                        this.Invalidate();
                    }
            }
        }

但即使这样做。Invalidate(); 我没有看到新表格已关闭。但是如果我使用在 mf.Close(); 上放置一个断点;并进入(F11)我在继续时看到它关闭。

为什么不使用断点就不会关闭?

4

4 回答 4

0

您将使用该InputBindings对象。我认为在您的情况下,最好将其放在Window级别(Window.InputBindings)。更多信息在这里:

http://msdn.microsoft.com/en-us/library/system.windows.input.inputbinding.aspx

于 2013-04-15T14:30:08.207 回答
0

您可以通过 2 种方式解决此问题。

  1. 如果您使用的是 GUI 界面,MenuItem请在您的菜单上添加一个控件,然后将Shortcut属性设置为Ctrl+M 然后双击MenuItem以编辑代码,然后调用您的launchMagnifier()函数。如果您不希望显示菜单,只需将visible属性设置为 false。如果您不想要它,这会使菜单保持隐藏状态,但仍保留该功能。

  2. 如果您不想要 MenuItem,您可以捕获表单中按下的键。因此,在您的 frmMain.cs 表单中,添加一个事件来捕获键,然后在Ctrl+M按下时调用launchMagnifier()

于 2013-04-15T14:30:15.733 回答
0

有几种方法可以做到这一点。

在您的表单上将 KeyPreview 属性设置为 true

然后将 OnKeyPress 或 OnKeyDown 事件处理程序添加到表单。

在 Ctrl-M 的测试中并显示/销毁表单并将已处理 (e.Handled) 设置为 true。

由于尚未处理,任何其他按键都将传递给当前聚焦的控件。

于 2013-04-15T14:33:52.693 回答
0

您可以添加 onKeyPress 或 onKeyDown 并检查是否按下了 Ctrl+M

private void OnKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 
if (((Control.ModifierKeys & Keys.Control) == Keys.Control) 
    && (e.KeyChar == 'M'|| e.KeyChar == 'm'))
{
        mf.Show();
}
于 2013-04-15T14:34:13.153 回答