如何在设计时间内使自定义控件的单击激活而不首先具有焦点?

时间:2015-05-31 02:36:37

标签: c# winforms custom-controls

我有一个自定义控件的设计器类,如下所示:

public class NavigationMenuItemDesigner : ParentControlDesigner
{
    public override SelectionRules SelectionRules
    {
        get { return SelectionRules.None; }
    }

    protected override void WndProc(ref Message msg)
    {
        const int WM_LBUTTONDOWN = 0x0201;
        const int WM_LBUTTONDBLCLK = 0x0203;

        if (msg.Msg == WM_LBUTTONDOWN || msg.Msg == WM_LBUTTONDBLCLK)
        {
            ISelectionService ss = (ISelectionService)GetService(typeof(ISelectionService));

            if (ss.PrimarySelection is NavigationMenuItem)
            {
                NavigationMenuItem item = (NavigationMenuItem)ss.PrimarySelection;

                item.PerformClick();

                return;
            }
        }

        base.WndProc(ref msg);
    }
}

当我点击自定义控件时,我想要触发PerformClick()方法。它的工作原理,但我必须点击控件两次。首先设置焦点,然后第二次激活代码。

当我第一次点击它时,它看起来像这样:

enter image description here

然后,当我再次点击它时,它就能满足我的需求:

enter image description here

关于我在这里做错了什么的想法?我应该不使用WndProc吗?

1 个答案:

答案 0 :(得分:0)

您需要处理控件的单击事件,然后确定光标所在的节点并对其进行操作。您似乎正在尝试处理节点的点击事件,当控件没有焦点时,该事件不会被触发。