如何编码键盘按钮在两种模式之间切换?

时间:2010-04-09 16:47:31

标签: c# silverlight silverlight-3.0

我正在做一个项目。我不会详细说明,但我会简化我的想法。我正在使用莫尔斯电码(点和短划线),我有两种方法: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(),使用莫尔斯码的SAME组合,但将它们映射到数字:

  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;
        }
   }

现在,Senario是:有2个文本框,一个用户将在其中编写莫尔斯代码,另一个用于输出。用户将从键盘上写下点.和短划线-并按Enter键,然后程序将转到2种方法中的一种来转换摩尔斯码。现在是什么告诉程序去哪里转换?

我的问题是:我想创建模式键以在两种模式之间切换:MorseToChar和MorseToNum。我希望向下箭头键像一个模式。当用户按下向下箭头时,程序将处于MorseToChar模式,只要用户输入程序直接使用方法convert_MorseToChar转换为字符。当用户再次按下向下箭头时,程序将在此处切换到MorseToNum模式,当用户输入为morsecode时,程序将直接使用方法Convert_MorseToNum()转换为数字。我怎么能这样做?

请原谅我的英语,英语不是我的母语:)

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

您可以使用每次按下所需键时都会切换的布尔值,如下所示:

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