= ONKEYPRESS +は、OnKeyDownが、どのようにリサイズは、すべてのキーを処理しますか?

StackOverflow https://stackoverflow.com/questions/1779374

質問

私は1つのフォーム、カスタム描画、なしのコントロールを持っています。

私はOnKeyDownイベントに私は行く、ユーザからの入力を取得し、その文字列にイベントのキーデータをマップする必要があります。

** - すべてがOKほとんどですので、私は、そのユーザーを認識することができることをすると、「CTRL X」などを押しました...問題は、異なるキーボード設定と言語の特定の文字である - そう、今日のために私のユーザーを取得

ã - > A

ó - > O

私はKeyPressイベントの権利を必要とするので?しかし、どのように私は例「L」とない+ L ALTのために入力したユーザーを知っていますか?私は今、しばらくの間、その周りに私の頭を取得することはできません...

「ControlKey、コントロール」 **私はのconfigureのショートカットにユーザーを聞かせ.ToString()を使用して「OemPeriod、コントロール」またはより良いようなユーザーフレンドリーなテキストようでない生成するので、私はそのようにそれを行う必要があります>
役に立ちましたか?

解決

はい、あなたは、KeyPressイベントが必要になります。か、ONKEYPRESSをオーバーライドします。キーストロークのKeyDownイベントで仮想キーコードをマッピングすることは非常に困難である、あなたは、現在のキーボードレイアウトに注意する必要があるだろう。 )(ToUnicodeExための MSDNのドキュメントを見てみましょうあなたが直面しているか見てます。

あなたはAltキー+ Lのようなキー入力の組み合わせを心配する必要はありません。彼らは、KeyPressイベントを生成しません。

ここでは例です。新しいWindowsフォームプロジェクトを起動して行い、このようなコードを見ます:

using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }
    StringBuilder mText = new StringBuilder();

    protected override void OnKeyPress(KeyPressEventArgs e) {
      if (e.KeyChar == '\b') {
        if (mText.Length > 0) mText.Remove(mText.Length - 1, 1);
      }
      else mText.Append(e.KeyChar);
      Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e) {
      TextFormatFlags fmt = TextFormatFlags.Left;
      TextRenderer.DrawText(e.Graphics, mText.ToString(), this.Font, this.ClientRectangle, Color.Black, fmt);
    }
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top