System.Windows.Forms.Textbox에서 상속받은 자신 만의 텍스트 상자를 만든 다음 WndProc을 재정의 할 수 있습니다.
WndProc는 운영 체제, 전원 메시지, 입력 등에서 모든 것에 대한 메시지를받는 초기 방법입니다. 메서드의 이름은 Win32 (및 Win16) 일로 후퇴합니다.이 두 주 기능 중 하나는 당신은 "WndProc"또는 Windows 프로 시저를 구현합니다.
이렇게하면 이벤트가 기본 구현에 전달되기 전에 마우스 (또는 다른 메시지)에 대한 Windows 메시지를 가로 챌 수 있습니다.
아래 예제에서 처리 할 기본 컨트롤을 아래로, 위로 이동하거나 두 번 클릭하지 않습니다.
public partial class MyTextBox : TextBox
{
int WM_LBUTTONDOWN = 0x0201; //513
int WM_LBUTTONUP = 0x0202; //514
int WM_LBUTTONDBLCLK = 0x0203; //515
public MyTextBox()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_LBUTTONDOWN ||
m.Msg == WM_LBUTTONUP ||
m.Msg == WM_LBUTTONDBLCLK // && Your State To Check
)
{
//Dont dispatch message
return;
}
//Dispatch as usual
base.WndProc(ref m);
}
}
남은 것은 메시지를 전달할시기를 결정하기 위해 상태를 확인하는 것입니다.
here을 처리 할 Windows 메시지 목록을 찾을 수 있습니다.
아주 좋았습니다. 감사합니다. 닷넷 스택 아래에서 드릴해야한다는 것을 알고있었습니다. – johnc
여전히 마우스 이벤트 인수를 얻지는 못하지만 이 솔루션을 좋아하고 해결할 수 있습니다 – johnc
마우스 이벤트 args를 전달하고 양식에서 동일한 이벤트 처리기를 사용하는 추가 이벤트를 텍스트 상자에 추가 할 수 있습니다. 그런 식으로 기본 마우스 처리 구현을 우회 할 수 있습니다. –