2012-01-04 16 views
1

我的表單有幾個按鈕,如「掃描」和「退出」。我在許多程序中看到哪些按鈕可以通過按鍵來使用。許多時候,按鈕上的文字都加下劃線(我不知道如何在這些論壇上使用下劃線選項!)。我去了表格並添加了一個按鍵事件:如何使用按鍵來運行方法?

private void Form1_KeyPress(object sender, KeyPressEventArgs key) 
    { 
     switch (key.ToString()) 
     { 
      case "s": 
       Run_Scan(); 
       break; 
      case "e": 
       Application.Exit(); 
       break; 
      default:      
       MessageBox.Show("I'll only accept 's' or 'e'."); 
       break; 
     } 
    } 

但是,然後按下's'或'e'的窗體不會做任何事情。不知道我哪裏錯了嗎?

回答

1

重寫ProcessKeyCommand將接受來自表單上任何位置的輸入。但是,您應該添加修飾符,因爲例如在文本框中按's'或'e'也會觸發該操作。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 

    switch (keyData) 
    { 
     case Keys.S: 
      Run_Scan();     
      break; 
     case Keys.E: 
      Application.Exit(); 
      break; 
     default:      
      MessageBox.Show("I'll only accept 's' or 'e'.");     
      break; 

    }   

    return base.ProcessCmdKey(ref msg, keyData); 
} 
1

key.ToString()是錯誤的調用方法。您想訪問關鍵屬性:key.KeyChar

有關包含示例的KeyPressEventArgs的更多信息,請參閱MSDN here

2

我認爲您正在尋找叫做Access Keys的東西:有'&'符號定義。

擺脫您的KeyPress事件處理程序。你不會需要它。

將按鈕的文字更改爲「&掃描」和「&退出」。

另外:Here are some guidelines about using access keys in windows applications.

+0

謝謝。它使我在視覺工作室的表格顯示帶有下劃線的字母,但是當程序運行時,線條實際上並不存在? – 2012-01-04 20:45:44

+0

您可能具有隱藏它們的操作系統功能。按住「Alt」鍵,它們應該出現。 – 2012-01-05 00:33:12

1

你可以把一個符號在你想爲你的按鈕的Text屬性的按鈕,熱鍵字母的前面。您可以從窗體設計器的「屬性」窗格中設置「文本」屬性,也可以通過編程方式進行設置。以下是程序化方法的一個例子。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     // make the 'B' key the hot key to trigger the key press event of button1 
     button1.Text = "&Button"; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("B"); 
    } 
} 
相關問題