2010-03-27 133 views
1

我想在ListView上選擇一個項目,當用戶點擊一個沒有項目的空間時。例如,項目下方的空間,但仍在ListView組件上。我已將ListView屬性「HideSelection」更改爲false,但僅當焦點更改爲其他組件時才起作用;而不是當用戶點擊ListView本身時。謝謝!如何選擇一個項目? - ListView

回答

5

這是您通常不應該修復的內容。用戶故意點擊某處,這可能是因爲她想要取消選擇一個項目。如果這是無意的,那麼她會理解發生的事情並知道如何糾正它。給予標準控制非標準行爲往往只會混淆用戶。

但你可以修復它。您需要防止本機ListView控件看到點擊。這需要重寫WndProc()方法並檢查點擊發生的位置。爲您的項目添加一個新類並粘貼下面顯示的代碼。編譯。將新的控件從工具箱的頂部拖放到窗體上。

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class MyListView : ListView { 
    protected override void WndProc(ref Message m) { 
    if (m.Msg == 0x201 || m.Msg == 0x203) { // Trap WM_LBUTTONDOWN + double click 
     var pos = new Point(m.LParam.ToInt32()); 
     var loc = this.HitTest(pos); 
     switch (loc.Location) { 
     case ListViewHitTestLocations.None: 
     case ListViewHitTestLocations.AboveClientArea: 
     case ListViewHitTestLocations.BelowClientArea: 
     case ListViewHitTestLocations.LeftOfClientArea: 
     case ListViewHitTestLocations.RightOfClientArea: 
      return; // Don't let the native control see it 
     } 
    } 
    base.WndProc(ref m); 
    } 
} 
+0

哇。這很好!只是一件事,有沒有辦法修改該代碼,所以它也適用於右鍵單擊?非常感謝! – 2010-03-27 15:44:43

+0

右鍵單擊是0x202。它應該顯示一個上下文菜單... – 2010-03-27 15:47:46

0

一種方法:在SelectedIndexChanged事件中,檢查值是否爲-1;如果是這樣,請將其重置爲先前的值(您可能將其存儲在變量中)。

+0

你知道我該如何得到索引嗎? – 2010-03-27 15:30:33

相關問題