【发布时间】:2013-06-17 17:58:15
【问题描述】:
我需要表单添加键 alt+1 来打开表单 3,但由于某种原因,当我调试并按下快捷方式时,它没有打开快捷方式
这是表格 2 中的代码段
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.KeyCode == Keys.A)
{
Form3 f3 = new Form3();
f3.ShowDialog();
}
}
正如我所说,如果 ti 有帮助,它不会按预期打开表格 3,这是我在表格 2 中使用的整个代码: [更新] [未解决]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
this.KeyPreview = true;
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
}
private void pictureBox1_Click(object sender, EventArgs e)
{
var myForm = new Form2();
myForm.Show();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.KeyCode == Keys.A)
{
Form3 f3 = new Form3();
f3.ShowDialog();
}
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
}
【问题讨论】:
-
您是否为 Form2 设置了 KeyPreview=True?
-
它应该与预览一起使用。您的代码看起来有点令人困惑,为什么 Form2 有一个 Form1_KeyDown 事件?这是Form1还是Form2?同样,从 pictureBox_Click 创建的 Form2 在垃圾收集时也会消失。如果调用 Form.Show 而不是 Form.ShowDialog(),则需要在方法外部存储一个成员变量来保存对表单的引用。 ShowDialog 阻塞..并等待 close 被调用,Form.Show 不会..因此您的方法将结束并且 Form2 将可用于收集(然后将调用 Dispose 并销毁表单)
-
您的
Form1_KeyDown...在您的班级Form2中是一个了不起的点,您想为您的Form2注册名称为Form1_KeyDown的KeyDown事件处理程序吗?我猜你甚至没有订阅你的Form2.KeyDown活动。
标签: c# winforms keyboard-shortcuts visual-c#-express-2010