1
public void TapeMeasure(object sender, EventArgs e)
  {
     if (TrussManager.Truss != null)
     {
        Point containerPoint = trussEditor.PointToClient(Cursor.Position);

        if (!trussEditor.MainMenu.CommandToolStrip.ClientRectangle.Contains(containerPoint))
           execute command A
        else
        execute command B
     }
  }

这个事件是从

ToolStripButton commandButton = new ToolStripButton("Tape", ConvertIconToImage(icon), TapeMeasure);

ToolStripMenuItem tsmi = new ToolStripMenuItem("Tape", ConvertIconToImage(icon), TapeMeasure);

(Winforms 应用程序)

我想知道我的光标何时不是我的工具条。但是,无论我的光标在哪里,上面的代码都会返回相同的结果。

此代码位于从工具条上的按钮或上下文菜单上的按钮调用的事件处理程序中。如果在上下文菜单上调用它,我假设用户想要使用当前鼠标点。否则我希望用户去点击他们想要的点

有什么建议么?

4

1 回答 1

1

由于您使用 MouseClick 事件来启动您的方法,因此 Click 事件的 Sender 对象将具有发起该事件的对象。在这种情况下,我只需确定发件人的类型,因为一个是 ToolStripButton,另一个是 MenuItem。正如我在聊天中提到的那样,Cursor.Point 会不断更新,我认为这是导致您的问题的原因。

此示例将确定哪个对象生成了 ClickEvent 并运行适当的方法。

public void TapeMeasure(object sender, EventArgs e) 
{ 
    if (TrussManager.Truss != null) 
    { 
        System.Type sysType = sender.GetType();

        if (!(sysType.Name == "ToolStripButton"))
            //execute command A 
        else 
            //execute command B 
    } 
} 

并且这个例子将考虑到 ContextMenu 的位置,如果它包含在工具栏中,则处理与单击按钮相同的方法。

public void TapeMeasure(object sender, EventArgs e) 
{ 
    if (TrussManager.Truss != null) 
    {
        System.Type sysType = sender.GetType();
        if (!(sysType.Name == "ToolStripButton"))
        {
            if (sysType.Name == "ToolStripMenuItem")
            {
                ToolStripMenuItem temp = (ToolStripMenuItem)sender;
                if (trussEditor.MainMenu.CommandToolStrip.ClientRectangle.Contains(trussEditor.MainMenu.CommandToolStrip.PointToClient(temp.Owner.Location)))
                {
                    //execute command A
                }
                else
                {
                    //execute command B
                }
            }
        }
        else
        {
            //execute command A
        }
    } 
} 
于 2012-07-05T08:02:39.827 回答