1

每次用户按下 F2 时,如何切换事件?

if(/*is pressed F2*/){
    this.Close(); 
}

提前致谢!

4

4 回答 4

1

一个简单的方法是使用MessageFilter

创建一个实现的类IMessageFilter

public class YourFilter : IMessageFilter
{
    public event EventHandler F2Pressed = delegate { };

    private const Int32 WM_KEYDOWN = 0x0100;

    public bool PreFilterMessage(ref Message m)
    {
        if (m.Msg != WM_KEYDOWN)
            return false;

        if ((Keys)m.WParam==Keys.F2)
            F2Pressed(this, new EventArgs());

        return false;
    }
}

并使用注册

var filter = new YourFilter();
Application.AddMessageFilter(filter);
filter.F2Pressed += YourEventHandlerHere;
于 2012-09-11T10:03:13.613 回答
1

首先创建一个按键事件,例如:

    private void form1_KeyDown(object sender, KeyEventArgs e)
    {
        if ( e.KeyCode == Keys.F2 ) 
            this.Close();
    }

当您按下 form1 控件上的键时获取键:在 form1 的事件中将 form1 更改KeyPreview为 truepage_load

    private void form1_Load(object sender, EventArgs e)
    {
        this.KeyPreview = true;
    }
于 2012-09-11T10:11:24.763 回答
0

现在,这将重点放在表单和其中的其他元素上(现在,如果您同意我的观点,请将其标记为答案):

public partial class preferences : Form {
    public preferences() {
        InitializeComponent();
        this.KeyPreview = true;
    }
    private void preferences_KeyDown( object sender, KeyEventArgs e ) {
        if (e.KeyCode == Keys.F2) {
            this.Close();
        }
    }
}
于 2012-09-11T10:26:15.480 回答
0

我找到了最简单的方法来做到这一点:

private void preferences_KeyDown( object sender, KeyEventArgs e ) {
    if (e.KeyCode == Keys.F2) {
        this.Close();
    }
}
于 2012-09-11T10:15:04.180 回答