C# 输入表单时聚焦picturebox
我正在用C#为学校创建一个简单的游戏,在这个游戏中,我使用WASD键控制一个角色。角色从精灵表中提取并放入imagelist中。imagelist在一个picturebox中 当它只是表单中的picturebox时,一切都很好,但是当我添加按钮或其他东西时,它就好像失去了焦点。它没有反应 我已经搜索了无数页,寻找一种在表单打开时将焦点设置在picturebox上的解决方案,但我没有找到任何有效的方法 我真的很感谢你的帮助C# 输入表单时聚焦picturebox,c#,winforms,picturebox,C#,Winforms,Picturebox,我正在用C#为学校创建一个简单的游戏,在这个游戏中,我使用WASD键控制一个角色。角色从精灵表中提取并放入imagelist中。imagelist在一个picturebox中 当它只是表单中的picturebox时,一切都很好,但是当我添加按钮或其他东西时,它就好像失去了焦点。它没有反应 我已经搜索了无数页,寻找一种在表单打开时将焦点设置在picturebox上的解决方案,但我没有找到任何有效的方法 我真的很感谢你的帮助 编辑:这是WinForms。PictureBox无法聚焦。它旨在作为一种显
编辑:这是WinForms。PictureBox无法聚焦。它旨在作为一种显示图像的方式,但不允许用户通过键盘进行输入 一种粗略的方法是拦截表单本身上的OnKeyDown事件,然后测试感兴趣的键。只要具有焦点的控件(如按钮)不希望自己处理这些键,此操作就可以工作 更好的方法是重写表单的ProcessCmdKey()方法。在目标控件(如按钮)上调用此方法,以确定键是否特殊。如果按钮没有识别出它是特殊的,那么它将调用父控件。通过这种方式,表单级方法将为实际目标的每个非特殊键的按键调用。这允许按钮仍然处理用于按下按钮的ENTER键,但其他键将由表单处理 最后,要在表单上的任何控件处理所有键之前拦截它们,您需要实现IMessageFilter接口。像这样的
public partial class MyWindow : Form, IMessageFilter
{
public MyWindow()
{
InitializeComponent();
Application.AddMessageFilter(this);
}
public bool PreFilterMessage(ref Message m)
{
// WM_KEYDOWN
if (m.Msg == 0x0100)
{
// Extract the keys being pressed
Keys keys = ((Keys)((int)m.WParam.ToInt64()));
// Test for the A key....
if (keys == Keys.A)
{
return true; // Prevent message reaching destination
}
}
}
return false;
}
我发现带有pictureBox1\u Hover调用pictureBox1.Focus()的事件鼠标悬停有效。当鼠标悬停在有问题的图片框上时,它会获得焦点。除此之外,在表单加载期间调用pictureBox1.Focus()似乎对焦点没有任何影响
this.pictureBox1.MouseHover += new System.EventHandler(this.pictureBox1_Hover);
private void pictureBox1_Hover(object sender, EventArgs e)
{
pictureBox1.Focus();
}
这对我有用 是的。我忘了写了,难道没有办法重写吗?我还应该如何移动我的角色?请提及重写表单的ProcessCmdKey()方法以获得答案。