我有这段代码:
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)我在继续时看到它接近。
为什么不使用断点就不关闭?
答案 0 :(得分:0)
您将使用InputBindings
对象。我认为在你的情况下,最好把它放在Window
级别(Window.InputBindings)。更多信息:
http://msdn.microsoft.com/en-us/library/system.windows.input.inputbinding.aspx
答案 1 :(得分:0)
您可以通过两种方式解决此问题。
如果您使用的是GUI界面,请在菜单上添加MenuItem
控件,并将Shortcut
属性设置为 Ctrl + M 然后双击MenuItem
编辑代码,然后调用launchMagnifier()
函数。如果您不希望显示菜单,只需将visible
属性设置为false即可。如果你不想要它,它会保持菜单隐藏,但仍保留功能。
如果您不想使用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();
}