Найдите высоту ContextMenuStrip перед ее отображением - PullRequest
4 голосов
/ 27 апреля 2010

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

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

0 голосов
/ 25 мая 2010

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

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, а не просто Высота == 0? Ну, по какой-то странной причине, ContextMenuStrip, казалось, имел высоту 4, прежде чем я отобразил его в первый раз (не 0, как можно было бы предположить), так что это еще один взлом внутри хака;) </p>

...