如何让Ctrl + M成为一个提示表单的事件?

时间:2013-04-15 14:21:36

标签: c# winforms

我有这段代码:

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 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

有几种方法可以做到。

在表单上将KeyPreview Property设置为true

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

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

任何其他按键将被传递到当前聚焦的控件,因为它尚未处理。

答案 3 :(得分: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();
}