2011-01-14 6 views
1

.NET Compact Framework 3.5ではC#3.0を使用しており、プログラムはWindows MobileとWindows CEデバイスの両方で実行できる必要があります。C#キーボード入力をテキストに変換する方法

独自のカスタムテキストボックスコントロールを作成しました。 TextBoxやその他のタイプのテキストボックスコントロールを継承しないため、オプションではありません。 キーボード入力をテキストに変換して、コントロールのTextプロパティをユーザーが入力しているものに正しく設定できるようにするにはどうすればよいですか? Textプロパティがある限り、これは通常の文字列変数であり、TextBox.Textプロパティより高度なものである必要はありません。

私は、KeyDownイベントを購読し、KeyEventArgsパラメータを各文字のテキストに手動で変換する方法を知っています。キーボード入力のテキストへの変換が、フレームワークまたはOSによって私のために行われる、よりよい解決策があることを願っています。おかげさまで

目に見えないTextBoxを持っていて、それにすべてのキーボード入力が送られて、コントロールのTextプロパティがTextBoxのTextプロパティと同じになるように設定するとどうなりますか?それを行う方法はありますか?

+0

実際のテキストボックスをコントロールに埋め込むことはできませんか?あなたは1つから継承する必要はありません – Simon

+0

すべての図面がカスタムなので、私は他のコントロールを私の中に埋め込むことはできません。私のコントロールはAlphaTextBoxと呼ばれ、AlphaMobileControlsライブラリのAlphaLabelコントロールから継承されます:http://alphamobilecontrols.codeplex.com/ –

答えて

0

私はあなたがKeyConverterクラスを探していると思います。私はこれがコンパクトなフレームワークの一部であるかどうかわかりません。

1

キーを文字列に変換すると(テキストではなく、テキストがフォント、サイズ、場所などのことを意味するため)、あまり複雑ではありません。あなたはその後、レンダリングを行う方法を決定する必要があり、あなたは複数行のサポートを持っている場合、このキーをアップ/ダウン取り扱いはありません。もちろん、

public class MyControl : Control 
{ 
    private int m_cursorPos = 0; 

    public MyControl() 
    { 
     Text = string.Empty; 
     CursorPos = 0; 
    } 

    private int CursorPos 
    { 
     get { return m_cursorPos; } 
     set 
     { 
      if(value < 0) value = 0; 
      if(value > Text.Length) value = Text.Length; 

      m_cursorPos = value; 
     } 
    } 

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.Back: 
       if (CursorPos > 0) 
       { 
        CursorPos--; 
        Text = Text.Remove(CursorPos, 1); 
       } 
       break; 
      case Keys.Delete: 
       if (CursorPos < Text.Length - 1) 
       { 
        Text = Text.Remove(CursorPos, 1); 
       } 
       break; 
      case Keys.Left: 
       CursorPos--; 
       break; 
      case Keys.Right: 
       CursorPos++; 
       break; 
      default: 
       base.OnKeyDown(e); 
       break; 
     } 
    } 

    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
     if (char.IsLetterOrDigit(e.KeyChar) 
       || char.IsSymbol(e.KeyChar) 
       || char.IsPunctuation(e.KeyChar) 
       || char.IsWhiteSpace(e.KeyChar)) 
     { 
      Text = Text.Insert(CursorPos, char.ToString(e.KeyChar)); 
      CursorPos++; 
      Debug.WriteLine(this.Text); 
     } 
    } 
} 

:このような何かはおそらくそれを解決に向けた長い道のりを行きます。

関連する問題