我想制作一个处理用户输入的控件,所以我希望能够处理不同的键盘,其中一种方法是使用IME.
如果您不处理它,当您有IME激活时会出现一个浮动窗口(例如日语写入活动).我发现需要处理的消息,但我不知道如何发送我正在捕获到IME的密钥以及何时获得有效的转换字符.
我想在winform应用程序中的ediatble区域中键入韩语文本.
但是人物正在重复,我试图覆盖默认值WndProc,但没有任何效果.
switch (m.WParam.ToInt32())
{
case Common.Interop.Window.WM_IME_CHAR:
break;
case Common.Interop.Window.WM_IME_ENDCOMPOSITION:
PassCharToScreen(m);
break;
case Common.Interop.Window.WM_CHAR:
PassCharToScreen(m);
break;
case Common.Interop.Window.WM_IME_NOTIFY:
break;
case Common.Interop.Window.WM_IME_COMPOSITION:
PassCharToScreen(m);
break;
case Common.Interop.Window.WM_IME_COMPOSITIONFULL:
break;
Run Code Online (Sandbox Code Playgroud)
当我输入英文时,断点命中WM_CHAR,但是当我输入韩文时,它会击中WM_IME_COMPOSITION第一个字符,然后在第一个字符后首先命中WM_IME_COMPOSITION然后点击WM_CHAR.
我观察到它键入了第一个字符正确.例如ㅁ(韩文字符)输入第二个字符.ㅁㅂㅁ(First char,second char,first char).我想要记事本中的行为
我使用日语IME作为示例,但在使用IME输入的其他语言中可能是相同的.
当用户使用IME将文本键入文本框时,将触发KeyDown和KeyUp事件.但是,在用户使用Enter键验证IME中的输入之前,TextBox.Text属性不会返回键入的文本.
因此,例如,如果用户键入5次あ然后验证,我将得到5个keydown/keyup事件,每次TextBox.Text返回""(空字符串),最后我将得到一个keydown/keyup为enter键和TextBox.Text将直接变成"あああああ".
在用户输入结束之前,如何在用户输入时获取用户输入?
(我知道如何在网页上的<input>字段的javascript中执行此操作,因此必须可以在C#中使用!)