상세 컨텐츠

본문 제목

C# TextBox에 한글 입력을 차단하는 방법

프로그래밍/C#

by TickTack 2025. 8. 7. 11:20

본문

이번에는 C#에서 TextBox에 한글 입력을 차단하는 방법에 대하여 알아보겠습니다.

숫자만 입력해야 된다거나 하는 TextBox가 있을 경우 적용하면 예외 처리에 좀 더 도움이 될 것입니다.

원리는 한/영 키의 전환을 막는 방식이므로 외부에서 한글 및 한자 등의 문자를 복사해서 붙여넣기 할 경우 별도의 처리가 필요합니다.

그리고 Winform과 WPF가 처리 방식이 약간 다르므로 현재 진행중인 프로젝트에 맞게 적용해야 합니다.

먼저 Winform부터 확인해보겠습니다. 테스트 환경은 Visual Studio 2022 입니다.

 

* Winform

WPF도 간단하긴 하지만 Winform에서도 간단하게 적용이 가능합니다.

테스트 환경은 .Net Framework 4.8 입니다.

디자인 화면에 있는 TextBox를 클릭하고, ImeMode를 찾아서 'Disable'로 변경해주면 끝입니다.

 

 

cs 코드로는 다음과 같이 적용할 수 있습니다.

 

textBox1.ImeMode = ImeMode.Disable;

 

그러나 이렇게 했는데도 적용이 되지 않는다면 추가적인 방법을 사용해야 합니다.

원인은 OS단에서 입력기가 한글로 되어있을 경우 강제로 IME를 활성화 시켜버리기 때문입니다.

따라서 아래의 코드를 추가해야 합니다. ForceEnglishInput 적용 시점은 원하는 때로 변경하시면 됩니다.

 

[DllImport("user32.dll")]
static extern long LoadKeyboardLayout(string pwszKLID, uint Flags);

[DllImport("user32.dll")]
static extern bool ActivateKeyboardLayout(IntPtr hkl, uint Flags);

// 입력 언어를 강제로 영어(US)로 전환
private void ForceEnglishInput()
{
    const string ENGLISH_KLID = "00000409";  // 영어(US) 키보드
    const uint KLF_ACTIVATE = 1;

    IntPtr hkl = (IntPtr)LoadKeyboardLayout(ENGLISH_KLID, KLF_ACTIVATE);
    ActivateKeyboardLayout(hkl, KLF_ACTIVATE);
}

public Form1()
{
    InitializeComponent();
    ForceEnglishInput();
}

 

위와 같은 코드를 추가 및 적용 후 테스트해보면 정상적으로 적용이 된 것을 확인할 수 있습니다.

 

* WPF

테스트 환경은 .Net 8.0 입니다. 다만 .Net Framework도 동작하니 참고해주세요.

WPF도 적용 방법이 어렵지 않습니다. 단지 Winform과 방식이 다를 뿐입니다.

그리고 테스트 결과 WPF는 Winform과는 다르게 OS단의 영향을 안 받는듯 합니다.

xaml 파일에서의 코드는 다음과 같이 TextBox에 InputMethod.IsInputMethodEnabled 속성을 False로 설정해주면 끝입니다.

<TextBox Name="tbTest" Text="Test Text" InputMethod.IsInputMethodEnabled="False"/>

 

cs 파일에서의 코드는 다음과 같이 사용하면 됩니다. 각각 1줄로 끝낼 수 있으므로 간편하게 사용이 가능합니다.

 

InputMethod.SetIsInputMethodEnabled(tbTest, false);  // 설정
bool nowEnabled = tbTest.IsInputMethodEnabled;  // 상태 확인

 

단, Winform에서 Elementhost로 불러낸 WPF Control에 있는 TextBox는 이 방법이 적용되지 않으므로 참고해주세요.

 

이상으로 C# TextBox에 한글 입력을 차단하는 방법에 대하여 알아보았습니다.

 

좀 더 고급스럽게(?) 하는 Mutex 같은 방법도 있겠지만 간단하게 적용할 수 있으므로 이 방법을 저는 좀 더 선호합니다.

물론 앞서 말씀드린 외부에서 복사해서 붙여넣기를 하면 뚫리긴 합니다만 그럴 경우에는 추가적인 처리를 하면 되므로 크게 문제될 것은 없어보입니다.

관련글 더보기

댓글 영역