2011-10-26 10 views
3

番号パッドのキーを使用してSMSスタイルの入力をシミュレートするには、誰かが正しい方向に向けることができますか?キーパッドを使用してSMSスタイルの入力をシミュレートする

文字を印刷するにはそれぞれの番号を得ることができますが、私のプログラムで同じキーの複数のキーを同じ 'イベント'として扱う方法がわかりません(つまり、キーが押された場合に複数の文字をスクロールします再び(例えば)2秒の期間内に)繰り返される。

私は複数のキーを検索しましたが、常にキーの組み合わせ(ctrl、alt、deleteなど)があります。

+0

私はそれをあなたが別の手紙を得るために何度かキーを押す標準的な電話スタイルのキーパッドを意味しますか?これはシステム全体のことですか、またはあなたのアプリケーションのためだけですか? – Polynomial

+0

私のアプリケーションのために、それはプロジェクトのための簡単な電話ネットワークシミュレータです –

答えて

2

(789電話機のキーボードと下段の一番上の行です)それらを生成し、右キー文字:追跡する

Dictionary<char, char[]> map = new Dictionary<char, char[]>() 
    { 
     {'1', num1}, 
     {'2', num2} 
    }; 

いくつかの変数:

char[] curr = null; 
    char currChar = '-'; 
    int index = 0; 

印刷機能:

void Print() 
    { 
     Console.WriteLine(curr[index]); 
    } 

とロジックは:

private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (map.ContainsKey(e.KeyChar)) 
     { 
      if (curr == null || e.KeyChar != currChar) 
      { 
       curr = map[e.KeyChar]; 
       index = 0; 
       currChar = e.KeyChar; 
       Print(); 
      } 
      else 
      { 
       ++index; 
       if (index == curr.Length) 
        index = 0; 
       Print(); 
      } 
     } 
    } 

ロジックは基本的に私たちのキーマップが問題のキーコードが含まれていることを確認するチェックします。何も追跡していない場合や、現在追跡しているものと異なる場合は、その特定の地図と最初の指標を使用します。

それ以外の場合は、リピートキーを押した場合は、インデックスを増やしてください(最後を渡すと最初に戻ります)。

+0

最後のキー押しはどうですか?あなたは何らかの種類のタイムアウトが必要ですか、またはEnterで確定してください... – thijs

+0

@ Moo-Juice 2秒以上経過しても自動的に現在の文字に戻るようにタイマーをロジックに追加するのは簡単なことでしょうか?さらにキーを押す? –

+2

@thijs、私は彼のためにすべてを書こうと思っていませんでしたが、彼に働く出発点を与えてください。これに追加するべきことがたくさんありますが、この例では、文字が循環しているときに文字を出力するだけです。タイムアウト時にそれらを文字列に追加するのはかなり簡単です(どの時点でchar配列/インデックスなどをリセットするか) –

5

ステートマシンが必要で、各キーのプレス数を数えて文字を判別します。次に、これらの文字を(イベントを使用して)残りのアプリに渡します。

ps。テンキーパッドの番号が電話の番号と異なる順序になっていることに気がつきましたか?

static char[] num1 = { 'A', 'B', 'C', '1' }; 
    static char[] num2 = { 'D', 'E', 'F', '2' }; 
    // etc... 

そして、我々はにマッピングされ、組み合わせの辞書を作る:あなたが利用可能な組み合わせを格納する必要があり、まず

+0

実際に気付かなかったので、数字でも物理的にもマッピングするかどうかを知る必要があります:) –

関連する問題