2012-07-05 2 views
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 Application)

Я хочу знать, когда мой курсор не мой ToolStrip. Однако приведенный выше код сохраняет возвращающий тот же результат независимо от того, где мой курсор.

Этот код находится в обработчике событий, который вызывается либо с помощью кнопки на панели инструментов, либо с помощью кнопки в контекстном меню. Если его вызвать в контекстном меню, я предполагаю, что пользователь хочет использовать текущую точку мыши. В противном случае я хочу, чтобы пользователь нажал на нужную точку

любые предложения?

+0

Winforms или Wpf и где находится этот код –

+0

Что вызывает запуск вашего обработчика событий? MouseMove? –

+0

Я пытаюсь дублировать, что вы используете для contextmenu. Я не могу добавить кнопку в стандартную, а также какой объект является назначенным контекстным меню. Пока ваш код работает –

ответ

1

Поскольку вы используете событие MouseClick для инициирования вашего метода, объект отправителя события Click будет иметь объект, который инициировал событие. В этом случае я бы просто определил Тип Отправителя, так как один из них - ToolStripButton, а другой - MenuItem. Как я упоминал в чате, Cursor.Point постоянно обновляется, что, по-моему, вызывает проблемы.

В этом примере будет определяться, какой объект сгенерировал ClickEvent и запустить метод approriate.

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 
    } 
} 

И этот пример будет принять во внимание расположение Контекстное и обрабатывать один и тот же метод, что и нажатие кнопки, если она содержится в панели инструментов.

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 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^