2012-05-28 110 views
0

C#的WinForms:知道哪些ListView控件具有焦點窗體上

在這樣一些應用:

enter image description here

我想寫一個代碼,「全選」按鈕。 如果我去檢查哪個列表視圖的「SelectedIndex」或「selected Item」屬性大於零,那麼它將不起作用,因爲如果用戶只是在它們的白色區域內點擊了它會怎麼樣?

而且form.ActiveControl也不起作用,因爲當我們點擊「SelectAll」按鈕時,已經太遲了! ActiveControl就是那個SelectAll按鈕。

也許我可以創建一個類級別的變量來記住哪個控件已被點擊,等等..但我認爲應該有更好的方法....但是什麼?!

感謝

+0

你想選擇全部按鈕來選擇列表中用戶最後點擊的所有項目? –

+0

@Boo:是...... – Bohn

回答

2

你可以在「的GotFocus」事件指派給一個方法,像這樣,記錄了「最後的焦點」控制這種方式。然後在你的SelectAll_CLick處理程序中,如果分配了listview,selectall,否則 - 不要!

private ListView mLastSelectedListView; 

private void ListViews_GotFocus(object sender, EventArgs e)' 
{ 
    ListView lv = sender as ListView; 
    if (null == lv) return; 
    mLastSelectedListView = lv; 
} 

private void SelectAll_Click(object sender, EventArgs e) 
{ 
    if (null == mLastSelectedListView) return; 
    mLastSelectedListView.SelectAll(); 
} 

下面是一個快速的'SelectAll'擴展方法來支持上述;

public static class ListViewExtensions 
{ 
    public static void SelectAll(this ListView lv) 
    { 
     foreach (ListViewItem item in lv.Items) 
      item.Selected = true; 

    } 
} 
+0

您認爲「Click」事件更好還是「GotFocus」? – Bohn

+2

我會和GotFocus一起去,因爲用戶可以通過tab來選擇列表。 – Steve

+0

是的,很好的電話。 嗯..ListView沒有SelectAll()方法,也試過ListView.Items.SelectAll()... – Bohn

相關問題