如果處理MouseDown
和/或ListView控件的MouseDoubleClick
事件,並使用HitTest
方法來確定鼠標動作的目標,你就會知道哪些項目已雙擊。這也是確定是否點擊NO項的一個好方法(例如,點擊部分填充列表中的空白區域
以下代碼將在文本框中顯示單擊的項目(如果發生單擊),並且如果發生雙擊,將彈出一個帶有雙擊項目名稱的消息框
如果單擊或雙擊發生在未由項目填充的列表視圖的區域中,則文本框或消息盒子通知yopu這個事實
這是一個微不足道的例子,根據你的需要,你將不得不一mess不振。
更新:我添加了一些代碼,當清單的空白區域被點擊或雙擊時清除ListView控件的SelectedItems屬性。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listView1.MouseDown += new MouseEventHandler(listView1_MouseDown);
listView1.MouseDoubleClick += new MouseEventHandler(listView1_MouseDoubleClick);
this.Load += new EventHandler(Form1_Load);
}
void Form1_Load(object sender, EventArgs e)
{
this.SetupListview();
}
private void SetupListview()
{
ListView lv = this.listView1;
lv.View = View.List;
lv.Items.Add("John Lennon");
lv.Items.Add("Paul McCartney");
lv.Items.Add("George Harrison");
lv.Items.Add("Richard Starkey");
}
void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
ListViewHitTestInfo info = listView1.HitTest(e.X, e.Y);
ListViewItem item = info.Item;
if (item != null)
{
MessageBox.Show("The selected Item Name is: " + item.Text);
}
else
{
this.listView1.SelectedItems.Clear();
MessageBox.Show("No Item is selected");
}
}
void listView1_MouseDown(object sender, MouseEventArgs e)
{
ListViewHitTestInfo info = listView1.HitTest(e.X, e.Y);
ListViewItem item = info.Item;
if (item != null)
{
this.textBox1.Text = item.Text;
}
else
{
this.listView1.SelectedItems.Clear();
this.textBox1.Text = "No Item is Selected";
}
}
}
的(潛在的)問題,此代碼,會發生什麼,如果用戶點擊或雙擊列表中的空白區域?在某些情況下,他們可能希望最後選擇哪個項目作爲結果。然而,在其他情況下,除非用戶明確選擇用於雙擊的項目,否則他們可能不想要發生任何事情。 – XIVSolutions
我發現我上面至少有一點不對。如果用戶雙擊空白區域,則DoubleClick事件不會觸發。對我很短視(我一直在使用一個不同的實現來設置一個用於其他方法的成員變量,所以有必要處理這種情況,即使用MouseDown事件沒有任何事情被點擊)。 – XIVSolutions
當您雙擊某一行上的複選框時,此代碼有問題。 – confusedMind