2010-04-27 60 views
4

當左鍵單擊按鈕(btnMassEdit)時,我想要顯示一個ContextMenuStrip(ctMenuMassEdit)。我希望按鈕,即,位置(0,-ContextMenuStrip.Height)相對於所述按鈕上方將被顯示的的ContextMenuStrip:在顯示ContextMenuStrip之前查找高度

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

然而,Height屬性爲0的第一次按鈕被點擊(I假設ContextMenuStrip在第一次顯示之前不會被創建),結果是ContextMenuStrip出現在按鈕的頂部。第二次,我點擊按鈕,但它出現在正確的位置,所以我的邏輯基本至少是正確的。

我嘗試添加顯示之前的ContextMenuStrip以下,但希望它沒有工作:

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

那麼,有沒有辦法顯示它在第一時間之前,我可以創造的ContextMenuStrip,所以我有正確的高度屬性?我當然可以使用黑客顯示它,隱藏它並再次顯示它,但這似乎並不簡單...

回答

2

ctMenuMassEdit.Show(btnMassEdit,Me.PointToScreen(btnMassEdit.Location),ToolStripDropDownDirection.AboveRight);

+0

謝謝,我不知道ToolStripDropDownDirection選項。像魅力一樣工作!我的最終代碼看起來像這樣: 'ctMenuMassEdit.Show(btnMassEdit,new Point(0,0),ToolStripDropDownDirection.AboveRight);' – Nailuj 2010-06-04 07:38:24

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,而不是簡單的身高== 0?好吧,出於一些奇怪的原因,ContextMenuStrip在我第一次顯示它之前似乎有4的高度(不是0,如人們所假設的那樣),所以它是黑客中的又一次黑客;)

相關問題