c# – 如何在Winform中采用韩文输入?

前端之家收集整理的这篇文章主要介绍了c# – 如何在Winform中采用韩文输入?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在一个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;

当我输入英文时,断点点击WM_CHAR,但当我输入韩文时,它会在第一个字符上点击WM_IME_COMPOSITION,然后在第一个字符之后,首先点击WM_IME_COMPOSITION然后点击WM_CHAR.

我已经观察到它的第一个字符正确.
例如ㅁ(韩文)
打字第二个字符
ㅁㅂㅁ(第一个字符,第二个字符,第一个字符).
我想要在记事本中的行为

解决方法

我以某种方式解决了这个问题,我在这里写信帮助别人.
如果代码中有任何错误,请通知我.
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并将mIsImeContinue设置为false.

我们需要处理backspace的情况.

原文链接:https://www.f2er.com/csharp/93936.html

猜你在找的C#相关文章