2016-09-12 5 views
0

stackoverflowの多くの回答のおかげで、リストビュー内の項目が右クリックされたときにコンテキストメニューを開く方法がわかります。すなわち:NOの項目がクリックされた場合にのみ、リストビューのコンテクストメニューを開く

private void listviewItems_MouseClick(object sender, MouseEventArgs e) { 
    ListView tmp_SenderListView = sender as ListView; 
    if (e.Button == MouseButtons.Right) { 
     ListViewItem tmp_SelectedItem = tmp_SenderListView.GetItemAt(e.X, e.Y); 
     if (tmp_SelectedItem != null) { 
      tmp_SelectedItem.Selected = true; 
      contextMenuStripItem.Show(tmp_SenderListView, e.Location); 
     } 
    } 
} 

私の目標は、ユーザーがリストビュー内でクリックしてもアイテムではなく、空白部分をクリックしていない場合、別の(異なる)コンテキストメニューを開くことです。

私の最初の考えは上記ヌルしたがってない項目であったtmp_SelectedItemを述べている場合だけをテストすることであった(カラムヘッダをクリックしたとき、好ましくは誘発しません)。しかし、私はelse caseを挿入し、それを入れ替えた。

private void listviewItems_MouseClick(object sender, MouseEventArgs e) { 
    ListView tmp_SenderListView = sender as ListView; 
    if (e.Button == MouseButtons.Right) { 
     ListViewItem tmp_SelectedItem = tmp_SenderListView.GetItemAt(e.X, e.Y); 
     if (tmp_SelectedItem == null) { 
      contextMenuStripNoItem.Show(tmp_SenderListView, e.Location); 
     } 
     else { 
      tmp_SelectedItem.Selected = true; 
      contextMenuStripItem.Show(tmp_SenderListView, e.Location); 
     } 
    } 
} 

それはうまくいかず、何も開いていない。 私はアイテムがクリックされた場合には、contextMenuStripNoItemが閉鎖されるだろうそうであった場合、私は、テストの前contextMenuStripNoItemを開いて、再びこの時間を試してみましたが、開くでしょうcontextMenuStripItem。これはどちらもうまくいかなかった。

は、私は、しかし、それだけで私はListViewコントロール内のクリックした何に関係なくどこかcontextMenuStripNoItemを開けないcontextMenuStripNoItem ListViewコントロールの主要ているContextMenuStripを作ってみました。追加のために、アイテムがクリックされたときに割り当てられたcontextMenuStripを閉じて、もう一方を開くことを試みました。あまりにもうまくいきませんでした。

最初の2つのアプローチではうまくいかなかったのですが、いくつかの調査の後でこれについてのチュートリアルやフォーラムに既存の質問がないことを確認しました(少なくとも、理解)、私はstackoverflowに向けることにしました。事前に

感謝:)

答えて

0

を試してみてください(私はあなたが項目をクリックしている場合、それはあなたドンので、選択され、ロジックを少し変更し、これを試してみてくださいチェックされている場合、menustrip1を表示していない場合は、右クリックしてアイテムに表示されないので、menustrip2を表示してください。 listboxマウスイベント全体をトリガーするMouse_Upイベントを使用できます。 Mouse_Clickアイテムがヒットした場合にのみ動作します。

private void listView1_MouseUp(object sender, MouseEventArgs e) 
     { 
      ListView tmp_SenderListView = sender as ListView; 
      if (e.Button == MouseButtons.Right) 
      { 

       if (tmp_SenderListView.SelectedItems.Count > 0) 
       { 
        contextMenuStrip1.Show(tmp_SenderListView, e.Location); 
       } 
       else 
       { 
        contextMenuStrip2.Show(tmp_SenderListView, e.Location); 
       } 
      } 
     } 

ホープこれは何の項目がクリックされていないときに開くいるContextMenuStripのイベントのコードまたはアイテムがクリックされたときに開くものでなければならない

+0

今私はあなたのソリューションを試してみましたが、他のものと同じように動作しますが、MouseClickイベントの中にifを置くとなぜ機能しませんか? – RememberOfLife

+0

@RememberOfLife「Mouse_Click」は、ユーザーがListView内のアイテムのラベルをクリックしたときにのみ機能します。 – Berkay

+0

アイテムがない領域をクリックすると、それは即座に開き、アイテムをクリックするとリリース時にのみ開きます。私には問題ない。ありがとう:) – RememberOfLife

1

は、このコードスニペット

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) 
    { 
     if (listView1.SelectedItems.Count > 0) 
      e.Cancel = true; 

    } 
+0

、役立ちますか? – RememberOfLife

+0

これはcontextMenuStripのオープンイベントです –

関連する問題