2009-08-15 34 views
1

我有一個MenuItem包含特定文件夾中的所有文件。C#Contextmenu跳躍如果填充彈出事件

的菜單項填充(使用System.IO.Directory.GetFiles)自身的Popup事件,但如果太靠近屏幕的右下角(或者看起來是這樣),它會跳得更高了,屏幕上正在填充。

如果在彈出Popup事件之前填充它,菜單項將在通常位置打開。

我必須在彈出的事件中填充它以保持文件夾的內容是最新的。

爲什麼菜單項在Popup事件中填充時會移動,以及如何避免它?

+0

你是否在各種瀏覽器中看到過這種行爲? – jim 2009-08-15 13:32:06

+0

對不起,我沒有詳細說明。它是Windows應用程序中的C#。 contextmenu連接到一個托盤圖標(這意味着它將在大部分時間在屏幕的右下角,因此使這成爲一個惱人的問題)。 – 2009-08-15 13:42:04

+1

您可以添加一些示例代碼來顯示問題嗎?當我在這裏嘗試時,它可以正常工作,據我所知。在上下文菜單填充時沒有發生屏幕更新,並且直到Popup處理程序完成後纔會顯示菜單。 – JimG 2009-08-16 06:05:02

回答

1

想到這一點後,我不確定在彈出時更新菜單是最好的方法。在啓動時建立一次菜單,然後使用FileSystemWatcher(如果存在不同位置,則使用一些FileSystemWatcher)來通知您更改,並根據需要更新菜單。

0

我對DataGridView有同樣的問題。

我使用彈出式菜單讓用戶在填充網格時從幾個最典型的輸入中進行選擇。根據單元格中的內容,選項會有所不同。 我有這個上下文菜單跳躍和閃爍。 我試了幾種方法,我終於做到了

重置我的DataGridView文本菜單屬性(我的意思是我只是歸零該屬性)

2.填充菜單在DataGridView中的CellMouseDown事件,而不是上下文菜單中的開幕活動

3.後(在CellMouseDown仍然)填充它,只需指定該菜單這個特定的細胞

myDataGridView[column, row].ContextMenuStrip = myPopUpMenu; 

就是這樣。工作得很好,沒有任何不希望的視覺現象;)。