2010-04-09 20 views
1

我在做一個項目。我不想詳述,但我會簡化我的想法。我使用莫爾斯電碼(點和破折號),我有2種方法:convert_MorseToChar()Convert_MorseTonum()。在convert_MorseToChar()方法有一個與輸入從其中將莫爾斯碼的用戶比較,並將其映射到字符開關:如何編寫鍵盤按鈕以在兩種模式之間切換?

private String convert_MorseToChar(ref string Ch) 
    { 
    switch (Ch) 
     { 
     Case ".-": 
      MorsetoChar = "a" 
      break; 
     Case "-...": 
      MorsetoChar = "b" 
      break; 
     Case "-.-.": 
      MorsetoChar = "c" 
      break; 
     Case "-..": 
      MorsetoChar = "d" 
      break; 
     Case ".": 
      MorsetoChar = "e" 
      break; 
     } 
    } 

而另一種方法Convert_MorseToNum(),UE的莫爾斯代碼,但映射相同的組合他們的數字:

private String Convert_MorseToNum(ref string Ch) 
    { 
    switch (Ch) 
     { 
     Case ".-": 
      MorsetoChar = "1" 
      break; 
     Case "-...": 
      MorsetoChar = "2" 
      break; 
     Case "-.-.": 
      MorsetoChar = "3" 
      break; 
     Case "-..": 
      MorsetoChar = "4" 
      break; 
     Case ".": 
      MorsetoChar = "5" 
      break; 
     } 
    } 

現在塞納里奧是:有2個文本框,一個用戶會寫它莫爾斯碼和另一種是輸出。用戶將從鍵盤上輸入點號.和破折號-,然後按Enter鍵,程序將轉到2種方法中的一種來轉換莫爾斯碼。現在什麼告訴程序要轉換到哪裏?

我的問題是:我想創建模式鍵在兩種模式之間切換:MorseToChar和MorseToNum。我希望向下箭頭鍵可以像模式一樣工作。當用戶按下向下箭頭時,程序將處於MorseToChar模式,每當用戶直接輸入程序時,都使用方法convert_MorseToChar轉換爲字符。當用戶再次按下向下箭頭時,程序將在用戶輸入莫爾斯碼時切換到MorseToNum模式,程序將直接使用方法Convert_MorseToNum()轉換爲數字。我怎樣才能做到這一點?

請原諒我的英語,英語不是我的母語:)

+1

-1對於問題標題中的不必要的哭泣。 – JYelton 2010-04-09 16:49:06

+0

+1,問題和JYelton,以平衡力量。 – 2010-04-09 16:49:55

+0

那麼標題被編輯了,所以我收回我的投票! :P – JYelton 2010-04-09 16:52:43

回答

1

可以消耗KeyDown事件。如果按下的鍵是向下的箭頭,你切換模式:

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    // Determine whether the keystroke is the down arrow. 
    if (e.KeyCode == Keys.Down) 
    { 
     charMode = !charMode; 
    } 
} 

當然,你必須定義你的charMode作爲bool中。當調用你的轉換方法時,你會檢查它的值。

private String Convert_Morse(ref string Ch) 
{ 
    if (charMode) return convert_MorseToChar(Ch) 
    else 
    return convert_MorseToNum(Ch); 
} 
+0

謝謝!它是我需要的,但有一點不同。如何編寫此鍵盤事件,以便確保焦點在哪裏,並且每當用戶單擊鍵盤上的向下箭頭時,keydown事件將被捕獲,並且布爾變量將被標記?在同一頁面中,我有一個文本框並將其關聯到一個keyUp事件。謝謝! – Sara 2010-04-10 19:09:22

+0

我想出瞭如何使用它: Application.Current.RootVisual.KeyDown + = Main_KeyDown; private void Main_KeyDown(object sender,System.Windows.Forms.KeyEventArgs e) //確定擊鍵是否是向下箭頭。 (e.KeyCode == Keys.Down) { charMode =!charMode; } } 乾杯.. – Sara 2010-04-10 22:22:00

0

你可以用它獲取每個所需的鍵被按下時觸發,像這樣一個布爾值:

bool NumericMode = false; // accessible to the Morse code methods 
private void ToggleMode() 
{ 
    if(NumericMode) 
     NumericMode = false; 
    else 
     NumericMode = true; 
} 
+0

或者:NumericMode =!NumericMode; – 2010-04-09 17:01:22

+0

非常簡潔!謝謝。 :) – JYelton 2010-04-09 17:03:47

相關問題