2011-07-05 6 views
1

최종 사용자가 Windows.Forms.TextBox에 유니 코드 제어 문자를 입력하는 것을 원하지 않는 시나리오가 있습니다. 알고 계시 겠지만, TextBox를 마우스 오른쪽 단추로 클릭하면 컨텍스트 메뉴가 표시되고이 메뉴의 마지막 메뉴 항목이 나타납니다. 상황에 맞는 메뉴는 "유니 코드 제어 문자 삽입 ->"이며 일부 유니 코드 제어 문자를 TextBox에 삽입 할 수 있습니다.TextBox에서 유니 코드 제어 문자를 허용하지 않으려면 어떻게해야합니까?

이 메뉴를 비활성화하거나 숨기는 방법을 알고있는 사람이 있습니까? - "유니 코드 제어 문자 삽입", "유니 코드 제어 문자 표시".

+0

당신은 textBox1.ContextMenu = 새의 ContextMenu()'를 사용하여 상황에 맞는 메뉴를 모두 함께 사용하지 않도록 설정할 수 있습니다 : 다음 contextMenu 당신의 textBox에 있음을 지정 선택권. –

답변

1

이 컨텍스트 메뉴 항목을 비활성화하더라도 사용자는 복사 & 붙여 넣기 또는 Alt-Numpad를 사용하여 모든 종류의 이상한 문자를 입력 할 수 있습니다. A-Z와 같이 입력을 엄격하게 제한하려면 MaskedTextBox 컨트롤을 사용할 수 있습니다.

세분화 된 컨트롤이 더 필요한 경우 TextBox.KeyPress 이벤트를 처리 할 수 ​​있습니다. 이 기술의 예는 SO 다음과 같은 질문에서 찾을 수 있습니다

1
텍스트 상자 ContextMenu을 무시

.

당신이 디자인 한 ContextMenu을 디자인하고 원하는 기능 만 구현하십시오. 즉이 있다면`myTextBox.ContextMenu = myContextMenu;

1

잘랄의 대답에 추가하려면,

var contextMenu = new ContextMenu(); 
contextMenu.MenuItems.Add(new MenuItem("Copy", (s, ea) => textBox1.Copy())); 
contextMenu.MenuItems.Add(new MenuItem("Paste", (s, ea) => textBox1.Paste())); 
contextMenu.MenuItems.Add(new MenuItem("Undo", (s, ea) => textBox1.Undo())); 
contextMenu.MenuItems.Add(new MenuItem("Select All", (s, ea) => textBox1.SelectAll())); 
.... 

textBox1.ContextMenu = contextMenu; 
+0

솔루션을 제공해 주셔서 감사합니다. 나는 datagridview와 textboxes 몇 개를 가지고있다. 하지만 이러한 메뉴가 기본적으로 표시되지 않는 VB에서 동일한 응용 프로그램이 있습니다. – Joboy

관련 문제