我正在.NET Windows Forms中编写自定义控件。请考虑以下代码:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch(m.Msg)
{
case WM_LBUTTONDOWN: // Yes, it's defined correctly.
MessageBox.Show("Left Button Down");
break;
}
}
它在运行时有效,但我需要它在设计师中工作。我怎样才能做到这一点?
注意:
我想有人可能会说“你无法检测到设计师的点击次数,因为设计界面捕捉它们并将其作为设计过程的一部分进行处理”
...以TabControl
为例。添加新选项卡时,可以单击以浏览选项卡,然后单击选项卡的可设计区域以开始设计选项卡页面的内容。这有什么作用?
答案 0 :(得分:1)
好吧,设计师吃了一些消息。如果您希望将所有邮件发送到Control
,则需要创建自定义控件设计器并将其发送给控件。
public class CustomDesigner : ControlDesigner
{
protected override void WndProc(ref Message m)
{
DefWndProc(ref m);//Passes message to the control.
}
}
然后将DesignerAttribute
应用于您的自定义控件。
[Designer(typeof(CustomDesigner))]
public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_LBUTTONDOWN = 0x0201;
switch (m.Msg)
{
case WM_LBUTTONDOWN: // Yes, it's defined correctly.
MessageBox.Show("Left Button Down");
break;
}
}
}
将控件拖到Form
,然后单击它。现在您应该在设计器中看到消息框:)