C# 如何在Winform中接受韩语输入?
我想在winform应用程序的可编辑区域中键入韩文文本 但是字符在重复,我试图覆盖默认的C# 如何在Winform中接受韩语输入?,c#,winforms,ime,C#,Winforms,Ime,我想在winform应用程序的可编辑区域中键入韩文文本 但是字符在重复,我试图覆盖默认的WndProc,但没有任何效果 switch (m.WParam.ToInt32()) { case Common.Interop.Window.WM_IME_CHAR: break; case Common.Interop.Window.WM_IME_ENDCOMPOSITION:
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;
当我用英语输入时,断点会点击WM\u CHAR
,但当我用韩语输入时,断点会在第一个字符上点击WM\u IME\u COMPOSITION
,然后在第一个字符后点击WM\u IME\u COMPOSITION
我注意到它键入的第一个字符是正确的。
例如ㅁ (韩文)
输入第二个字符。
ㅁㅂㅁ (第一个字符,第二个字符,第一个字符)。
我想要记事本上的行为,我已经设法解决了这个问题,我在这里写作是为了帮助别人。 如果代码中有任何错误,请告诉我
private bool mIsImeProcessed = true;
private bool mIsImeContinue = false;
case WM_IME_COMPOSITION:
{
if (mKoreanInput == true)
{
long lParam = m.LParam.ToInt64();
long wParam = m.WParam.ToInt64();
char c = (char)m.WParam;
if (lParam == 24600)
{
if (mIsImeProcessed)
{
mIsImeProcessed = false;
mIsImeContinue = false;
PassCharToThirdParty(m);
}
else
{
PassCharToThirdPartyWithBackSpace(((char)m.WParam).ToString());
}
mIsImeContinue = true;
}
}
else if (lParam == 2048)
{
if (mIsImeProcessed)
{
}
else
{
if (mIsImeContinue == true)
{
PassCharToThirdPartyWithBackSpace(((char)m.WParam).ToString());
}
}
mIsImeProcessed = true;
}
else
{
PassBackSpaceToThirdParty();
}
}
break;
case Common.Interop.Window.WM_IME_ENDCOMPOSITION:
if (mKoreanInput == true)
{
mIsImeProcessed = true;
mIsImeContinue = false;
}
break;
首先检查语言是韩语还是其他语言,所以如果是韩语,你必须以不同的方式处理
你必须得到开始和结束构图的信息,你必须经常检查它是字符的延续还是构图的延续。在WndProc
中获得合成结束后,将mIsImeProcessed
设置为true
,并将misimecotinue
设置为false
我们还需要处理退格的情况。也显示switch语句。此链接可能会对您有所帮助。这是什么样的控制?标准的
文本框
?它是子类化的吗?因为否则它应该工作得很好。记事本中的文本区域也基于一个普通的编辑控件,默认情况下,它连接了所有需要输入法的内容。WPF将是一个不同的故事,但不是WinForms。控件基本上是一个第三方控件,他们没有处理它,我必须从windows端代码处理它。我正在将c#code中的输入字符传递给Vincent McNabb答案(第三条评论中的链接)下方发布的第三方dllyou,这有帮助,是否意味着这个问题可以结束?