我有一个表,自定义绘制,没有控件。

当我需要从用户得到我去的onkeydown事件的输入,然后活动的KEYDATA映射到一个字符串** - 这样我就可以识别出用户已经按下“CTRL X”,等等,所以一切几乎是确定...问题是有不同的键盘设置和语言特定的字母 - 所以今天我的用户获得

A - >一

ó - > 0

所以,我需要KeyPress事件吧?但我怎么知道用户在输入例如“L”,而不是ALT + L?我不能让我的周围的头,而现在......

** - 我需要那样做,因为我让用户配置快捷方式和使用的ToString()产生不那么像“OemPeriod,控制”,甚至更好的用户友好的文本:“CONTROLKEY,控制”

有帮助吗?

解决方案

是的,你需要的按键响应事件。或者更确切地说,覆盖的OnKeyPress。在KeyDown事件到击键映射虚拟键代码是相当困难的,你必须要知道当前的键盘布局。看看在 MSDN文档的ToUnicodeEx(),看看你是什么对抗。

您不必像左右Alt键+ L键击组合忧虑。他们不产生按键事件。

下面是一个例子。启动一个新的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