2010-04-27 3 views
4

У меня есть ContextMenuStrip (ctMenuMassEdit), который я хочу отображать при нажатии левой кнопкой мыши (btnMassEdit). Я хочу ContextMenuStrip, который будет отображаться над кнопкой, то есть положение (0, -ContextMenuStrip.Height) по отношению к кнопке:Найти высоту ContextMenuStrip перед его отображением

private void btnMassEdit_Click(object sender, EventArgs e) 
{ 
    ctMenuMassEdit.Show(btnMassEdit, new Point(0, -ctMenuMassEdit.Height)); 
} 

Однако свойство Высота 0 в первый раз кнопка нажата (я предполагаю, ContextMenuStrip не создается до того, как он будет показан в первый раз), и результат заключается в том, что ContextMenuStrip появляется поверх кнопки. Второй раз я нажимаю кнопку, однако он отображается в правильном положении, поэтому основной из моей логики, по крайней мере, правильный.

Я попытался добавить следующее перед показом ContextMenuStrip, но он не работает, как ожидалось:

if (!ctMenuMassEdit.Created) 
{ 
    ctMenuMassEdit.CreateControl(); 
} 

Итак, есть ли способ, которым я могу создать ContextMenuStrip перед показом его в первый раз, так что я имеют правильную высоту? Я мог бы, конечно, воспользоваться взломом, чтобы показать его, скрывая его и показывая его снова, но это не кажется действительно опрятным ...

ответ

2

как насчет ctMenuMassEdit.Show (btnMassEdit, Me.PointToScreen (btnMassEdit.Location), ToolStripDropDownDirection.AboveRight);

+0

Спасибо, я не знал о опции ToolStripDropDownDirection. Работал как шарм! Мой окончательный код выглядел так: 'ctMenuMassEdit.Show (btnMassEdit, новая точка (0, 0), ToolStripDropDownDirection.AboveRight);' – Nailuj

0

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

private void btnMassEdit_Click(object sender, EventArgs e) 
{ 
    if (ctMenuMassEdit.Height < 5) 
    { 
     ctMenuMassEdit.Show(btnMassEdit, new Point(0, -ctMenuMassEdit.Height)); 
     ctMenuMassEdit.Hide(); 
    } 
    ctMenuMassEdit.Show(btnMassEdit, new Point(0, -ctMenuMassEdit.Height)); 
} 

Вы можете спросить, почему я проверяю Рост < 5, а не просто Height == 0? Ну, по какой-то странной причине ContextMenuStrip, казалось, имел высоту 4, прежде чем я отобразил его в первый раз (а не 0, как можно было бы предположить), так что это еще один взлом внутри взлома;)

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

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