웬만큼 VB를 쓰는 사람이라면 다 알 법한 얘기지만.
나처럼 당연히 될 거라고 믿다가 안 되는 통에 당황하는 사람들도 있을까 하여. (이 실력으로 예전엔 어찌 밥벌어 먹었는지 참.;;)
(내 검색 스킬이 나쁜 건지 네이버에서는 검색이 안 되기도 하고.)
MDI 구성에서.
Child Form에다 텍스트 박스를 붙여넣은 뒤에 실행을 해보면.
Ctrl+C, Ctrl+V, Ctrl+X가 안 먹는다.
즉, 복사하기, 붙여넣기, 잘라내기가 안 된다는 이야기.
마우스 오른쪽 클릭을 하면 메뉴가 나오긴 하는데, 그건 도저히 불편해서 못 쓸 방법이고.
속성이 잘못됐나 싶어서 이거저거 아무리 바꿔가며 테스트해도 안되더라는 말씀.
일단 속성 문제는 아닌 거 같아서 SDI 구성(달랑 Form 하나만)으로 테스트 해보니.
잘 된다.
즉, 문제는 MDI 구성에서 뭔가 문제가 있다는 것.
여기까지는 알아냈지만, 더 이상 진도가 안 나간다.
네이버를 검색해도 뾰족한 답이 없고.
(아예 keydown event에서 받아온 키 값으로 수동 구현해놓은 건 있긴 했지만, 그건 너무 무식한 방법이고.)
한글로 구글링을 해도 마찬가지.
결국 google 전체 검색으로 찾았다.
(영어 기피증 때문에 시간 손해만.;;)
원인은.
MDI-Parent가 먼저 Key event를 받는데.
이 event를 처리할 적절한 code가 없다는 것.
그래서 아래와 같은 코드를 MDI-Parent 상단에 넣어주면 된다.
Private Declare Auto Function SendMessage Lib "user32" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
'Override the Pressed Key Processing Routine of the MDI-Parent
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
SendMessage(Me.ActiveMdiChild.Handle, msg.Msg, msg.WParam, msg.LParam)
End Function
출처는 여기.
근데 Ctrl+C, Ctrl+X, Ctrl+V는 잘 되는데.
Ctrl+A가 안 된다.;;
아... 이건 정말 수동 구현해야 할 듯.;;



덧글
umy73 2009/12/10 23:16 #
설마 시샾에서도 안되는 것은 아니겠죠.요즘 우리회사 신규시스템은 시샾으로 개발중인데..
뭐 저야 여전히 파워빌더 6.5 쓰는 프로젝트만 계속 투입되고 있지만요. -0-
gnuland 2009/12/11 00:39 #
파워빌더. 추억의 단어군요.