joh*_*hnc 0 c# events winforms
我在Winforms应用程序上有一个多行文本框,我希望能够在应用程序的某些状态下单击而不更改文本选择.
我仍然想订阅MouseDown(或Click)事件,我只是不希望文本选择对它做出反应.
我希望在MouseEventArgs上有一个Handled或Cancel属性,但遗憾的是,没有.
我可以听取选择更改事件并尝试在需要时重置它,但这感觉有点像黑客一样,因为我必须在选择更改事件之前记住当前选择.有没有人有比这更好的建议?
您可以创建自己的Textbox继承自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);
}
}
Run Code Online (Sandbox Code Playgroud)
剩下要做的就是添加对状态的检查,以确定何时传递消息.
您可以在此处找到要处理的Windows消息列表.
| 归档时间: |
|
| 查看次数: |
7302 次 |
| 最近记录: |