2014-11-30 5 views
0

Я пытаюсь извлечь верхнюю левую координату расположения ToolStripMenuItem относительно ее родительского объекта, поскольку она отображается на экране. Существует свойство Bounds, в котором есть элемент Location, но он возвращает бессмысленную (по крайней мере, с моей точки зрения) информацию о ее фактическом местоположении.Location ToolStripMenuItem относительно родителя

«Нажмите» событие-обработчик выглядит следующим образом:

private void newShapeOption_Click(object sender, EventArgs e) 
{ 
    ToolStripMenuItem item = sender as ToolStripMenuItem; 
    Point point = item.Bounds.Location; // returns {X = 0, Y = 2} every time for some reason 
    // the rest is unimportant 
} 

красная точка (Paint Skillz;) на изображении показывает точное положение, которое я хотел бы использовать (родитель является форма управления под названием «окно 0» - это и MDI приложение):

Example

+0

Это действительно ToolStrip? Когда я перетаскиваю панель инструментов в свою Winform, она автоматически присоединяется к вершине формы, которая примерно соответствует X = 0, Y = 2. –

+0

@RobertHarvey Он состыкован сверху, но это ToolStripMenuItem (дочерний элемент управления, который я считаю). Bound.Location явно возвращает то же место, что и родительский элемент, который, как мне кажется, имеет смысл, поскольку это единственный ребенок и, следовательно, первый. Позор, что нет способа получить местоположение фактического визуализированного графического объекта. – Venom

+0

Каково расположение фактического визуализированного графического объекта? Логично, что первый пункт меню в прикрепленном объекте инструментальной панели должен располагаться в верхнем левом углу инструментальной панели, давать или принимать несколько пикселей. –

ответ

1

Контекстные меню не имеют осведомленности о физическом местоположении на объекте, где вы щелкнули. Это провинция события OnClick самого объекта. Поэтому, если вы хотите, чтобы ваше контекстное меню имело доступ к координатам щелчка, вам нужно будет связать событие OnClick объекта с кликом, захватить координаты щелчка в некоторых глобальных переменных формы, а затем использовать эти значения в вашем ContextMenu_Click мероприятие.

0

Вы можете использовать ширину элемента, например, как в этом примере: я хочу поставить label1 после пунктов меню

int w = 0; 
for (int i = 0; i < menuStrip1.Items.Count; i++) 
{ 
    w += menuStrip1.Items[i].Width; 
} 
label1.Width = (int)(this.Width - w); 
label1.Location = new Point(w, label1.Location.Y); 
Смежные вопросы