我有一个ContextMenuStrip(ctMenuMassEdit),我想在左键单击按钮时显示(btnMassEdit)。我希望ContextMenuStrip显示在按钮上方,即相对于按钮的位置(0,-ContextMenuStrip.Height):
private void btnMassEdit_Click(object sender, EventArgs e)
{
ctMenuMassEdit.Show(btnMassEdit, new Point(0, -ctMenuMassEdit.Height));
}
但是,第一次单击按钮时Height属性为0(我假设在第一次显示之前未创建ContextMenuStrip),结果是ContextMenuStrip出现在按钮的顶部。然而,第二次单击按钮,它出现在正确的位置,因此我的逻辑基本至少是正确的。
我在显示ContextMenuStrip之前尝试添加以下内容,但它没有按预期工作:
if (!ctMenuMassEdit.Created)
{
ctMenuMassEdit.CreateControl();
}
那么,有没有办法在第一次显示ContextMenuStrip之前创建它,所以我有正确的Height属性?我当然可以使用显示它的黑客,隐藏它并再次显示它,但这看起来并不是很整洁......
答案 0 :(得分:2)
答案 1 :(得分: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));
}
你可能想知道为什么我检查Height&lt; 5而不是简单的高度== 0?好吧,由于一些奇怪的原因,ContextMenuStrip似乎在我第一次显示它之前的高度为4(不是0,正如人们所假设的那样),所以它是hack中的另一个hack;)