2010-02-21 65 views
4

我正在使用Winforms ListView來顯示一些文件,但除了顯示像explorer這樣的文件外,我想要在右鍵單擊某個項目時獲得相同的資源管理器右鍵菜單。如何在Winforms ListView中獲取資源管理器右鍵菜單?

這可能嗎?我如何爲我的ListView應用程序啓用它?

+0

你想** **資源管理器菜單或類似資源管理器*的上下文菜單。你現在在你的listview中有什麼代碼?我剛剛在listview中做了一些contextmenu的東西。 – IAbstract 2010-02-21 23:55:07

+0

謝謝,我的意思是根據右鍵單擊哪個文件顯示的資源管理器上下文菜單。現在我已經顯示的代碼使用項目填充列表視圖,但尚未右鍵單擊菜單。 – 2010-02-22 00:01:56

+1

還可以考慮使用shell控件騙子Shell MegaPack - http://www.ssware.com/megapack.htm - 這些是類似Explorer的控件,帶有上下文菜單,拖放,重命名,縮略圖視圖,詳細視圖等,就像Windows資源管理器。 – logicnp 2010-12-13 04:03:00

回答

2

我知道這樣做的唯一方法是使用pinvoke和COM來做到這一點。你想要的非託管API,我認爲是SHCreateDefaultContextMenu()。一旦你完成了互操作(首先檢查pinvoke.net),你就可以完成DEFCONTEXTMENU所要求的所有其他事情。這並不容易。歡迎來到馬存保機構的土地。

+1

感謝希望我能從中找到自己的出路。 – 2010-02-21 23:46:35

+0

我看着pinvoke,但這些似乎並不存在。我不能成爲第一個想要這種行爲的人,對吧? – 2010-02-22 04:30:15

+0

您可能是第一個不願意與他人分享的人。有很多顯而易見的東西從那裏丟失。 – 2010-02-22 07:10:16

2

我其實是有麻煩的自定義上下文菜單顯示用右鍵點擊:Erratic Behavior from ContextMenu

我仍然實現略有不同:

private void lstModules_MouseDown(object sender , MouseEventArgs e) 
    { 
     hitTest = lstModules.HitTest(e.Location); 

     switch (e.Button) 
     { 
      case MouseButtons.Right: 
       if (hitTest != null && hitTest.Item != null) 
       { 
        // right clicking an item in the listview 
        selectedModule = hitTest.Item.Name; 

        lstModules.ContextMenuStrip = mnuContext_OptionsA; 
       } 
       else 
       { 
        // right clicking in white area of listview 
        lstModules.ContextMenuStrip = mnuContext_OptionsB; 
       } 
       break; 
     } 
    } 
相關問題