我正在用C#創建一個簡單的學校遊戲,我使用WASD鍵控制一個角色。該角色從精靈表中獲取並放入圖像列表中。圖像列表位於圖片框中。當輸入表格時對焦picturebox
一切正常,當它只是在窗體中的圖片框,但是當我添加一個按鈕或其他東西,它就像失去了焦點。它沒有迴應。
我已經搜索無盡的頁面解決方案,當窗體打開時將焦點設置在圖片框上,但是我還沒有找到任何可行的方法。
我真的很感謝一些幫助。
編輯:這是WinForms。
我正在用C#創建一個簡單的學校遊戲,我使用WASD鍵控制一個角色。該角色從精靈表中獲取並放入圖像列表中。圖像列表位於圖片框中。當輸入表格時對焦picturebox
一切正常,當它只是在窗體中的圖片框,但是當我添加一個按鈕或其他東西,它就像失去了焦點。它沒有迴應。
我已經搜索無盡的頁面解決方案,當窗體打開時將焦點設置在圖片框上,但是我還沒有找到任何可行的方法。
我真的很感謝一些幫助。
編輯:這是WinForms。
PictureBox無法獲得焦點。它的目的是作爲一種顯示圖像的方式,但不打算允許用戶輸入,例如通過鍵盤。
一種粗糙的方法是在窗體本身上截獲OnKeyDown事件,然後測試感興趣的鍵。只要擁有焦點的控件(例如Button)不想自己處理這些密鑰,就會工作。
更好的方法是覆蓋Form的ProcessCmdKey()方法。在目標控件上調用此方法(如Button),以確定該按鍵是否特殊。如果按鈕不能識別它是特殊的,那麼它會調用父控件。通過這種方式,每個按鍵都會調用表單級別的方法,而不是實際目標的特殊鍵。這允許按鈕仍然處理用於按下按鈕的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;
}
這是WinForms? – ChrisF 2012-01-15 23:00:03
是的。我忘了寫它。 – Antmoritz 2012-01-15 23:01:56