2009-07-23 1 views
0

Я хочу показать ContextMenuStrip в месте расположения ToolStripStatusLabel в StatusStrip. Обычные элементы управления имеют PointToScreen/PointToClient/etc, но поскольку ToolStripStatusLabel получен из Component, это не так.Показать ContextMenuStrip в местоположении элемента StatusBar

Любая помощь будет оценена по достоинству.

ответ

0

Разве вы не можете просто сделать что-то вроде этого:

int x = label.Bounds.Location.X + statusStrip.Location.X; 
int y = label.Bounds.Location.Y + statusStrip.Location.Y; 
menu.Show(this, x, y); 
0

Отъезд Bounds свойство ToolStripStatusLabel. Используйте его, как это делать то, что вам нужно сделать:

contextMenuStrip1.Show(statusStrip1, toolStripStatusLabel2.Bounds.X, toolStripStatusLabel2.Bounds.Y);    
0

Есть несколько шагов, участвующих в получении правильного расположения мыши на форме, когда он нажал на ToolStripStatusLabel. Как вы уже упоминали, ToolStripStatusLabel не имеет методов PointToClient или PointToScreen, но родительский элемент управления StatusStrip.

Try:

private void toolStripStatusLabel_MouseDown(object sender, MouseEventArgs e) 
{ 
    Point p = e.Location; 
    p.Offset(toolStripStatusLabel.Bounds.Location); 
    myContextMenu.Show(StatusStrip.PointToScreen(p)); 
} 
3

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

void toolStripItem_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      var label = (ToolStripItem)sender; 
      this.contextMenuStrip1.Show(this.mainStatusStrip, label.Bounds.X + e.X, label.Bounds.Y + e.Y); 
     } 
    } 

Добавление мыши координаты относительно контроля (e.X, e.Y) в пределах координат делает меню появляются точно в правильном положении. Опуская это, вы увидите меню в верхнем левом углу инструмента ToolStripItem. Для записи.