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に向けることにしました。事前に
感謝:)
今私はあなたのソリューションを試してみましたが、他のものと同じように動作しますが、MouseClickイベントの中にifを置くとなぜ機能しませんか? – RememberOfLife
@RememberOfLife「Mouse_Click」は、ユーザーがListView内のアイテムのラベルをクリックしたときにのみ機能します。 – Berkay
アイテムがない領域をクリックすると、それは即座に開き、アイテムをクリックするとリリース時にのみ開きます。私には問題ない。ありがとう:) – RememberOfLife