簡體   English   中英

C#:Windows窗體:在面板/圖片框中獲取擊鍵?

[英]C#: Windows Forms: Getting keystrokes in a panel/picturebox?

我正在使用Windows窗體為游戲制作關卡編輯器。 該表單有幾個下拉菜單,文本框等,用戶可以在其中鍵入信息。

我想讓CTRL + VCTRL + A等命令可用於游戲世界本身,而不是文本操作。 游戲世界由Panel包含的PictureBox表示。

此事件處理程序不會觸發:

private System.Windows.Forms.Panel canvas;
// ...
this.canvas = new System.Windows.Forms.Panel();
// ...
this.canvas.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.canvas_PreviewKeyDown);

這樣做的首選方式是什么? panel甚至可以接收鍵盤輸入嗎? 我想允許用戶在處理文本輸入時使用copy / paste / select-all命令,但在游戲世界中放置對象時則不允許。

從Control.CanSelect的MSDN文檔:

以下列表中的Windows窗體控件不可選,並且將為CanSelect屬性返回false值。 從這些控件派生的控件也是不可選擇的。

  • 面板
  • 分組框中
  • 圖片框
  • 進度條
  • 分離器
  • 標簽
  • LinkLabel(當控件中沒有鏈接時)

雖然它表示從這些控件派生的控件無法獲得焦點,但您可以創建派生控件並使用SetStyle方法啟用“可選”樣式。 您還必須將TabStop屬性設置為true才能使其正常工作。

public class SelectablePanel : Panel
{
    public SelectablePanel()
    {
        this.SetStyle(ControlStyles.Selectable, true);
        this.TabStop = true;
    }
}

然后使用此控件而不是普通的Panel。 您可以按預期處理PreviewKeyDown事件。

您可能希望在表單級別執行密鑰捕獲。 強烈建議從幫助編寫基礎.NET代碼的人那里閱讀:

http://blogs.msdn.com/jfoscoding/archive/2005/01/24/359334.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM