Winforms ListView を使用していくつかのファイルを表示していますが、エクスプローラーのようにファイルを表示する以外に、アイテムを右クリックしたときに同じエクスプローラーの右クリック メニューを表示したいと考えています。
これは可能ですか?ListView アプリで有効にするにはどうすればよいですか?
実際、右クリックでカスタム コンテキスト メニューを表示するのに問題がありました: 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;
}
}
これを行う唯一の方法は、pinvoke と COM を使用することです。必要なアンマネージ API はSHCreateDefaultContextMenu()だと思います。相互運用が完了したら (最初に pinvoke.net を確認してください)、DEFCONTEXTMENUで必要な他のすべてのことに対して相互運用を行うことができます。簡単ではありません。PIDL の国へようこそ。
IContextMenuインターフェイスが必要です。この非常に便利なシリーズも参照してください。