2012-05-28 33 views
0

用這樣的形式:啓用/禁用上移/下移按鈕上一個ListView

我寫了這段代碼,當他們點擊在項目照顧啓用前移/下按鈕/禁用邏輯的(我們不關心左側的Avaiable列表中,我們只關心在右側選擇列表)

enter image description here

private void SelectedLV_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     // what to do wth move up button 
     if (SelectedLV.SelectedIndices.Count == 1 && SelectedLV.SelectedItems[0].Index > 0) 
     { 
      MoveUpBtn.Enabled = true; 
     } 
     else 
     { 
      MoveUpBtn.Enabled = false; 
     } 

     //what to do with move down button 
     if (SelectedLV.SelectedIndices.Count == 1 && SelectedLV.SelectedItems[0].Index < SelectedLV.Items.Count - 1) 
     { 
      MoveDownBtn.Enabled = true; 
     } 
     else 
     { 
      MoveDownBtn.Enabled = false; 
     } 
    } 

我覺得它工作正常,該場景但我的問題是關於什麼的時候,我們點擊Selected Li stview,什麼是良好的邏輯來處理,並禁用上移/下移按鈕? 我不希望他們被啓用,當我們不在裏面SelectedListView ... 另外,如果你發現我粘貼的代碼的任何問題,請讓我知道。 感謝

回答

2

您即將拍攝焦點要求。這些UI更新最好用Application.Idle事件完成,它只在沒有重要事件發生時運行。並且可以幫助消除大量的事件處理程序。像這樣:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     Application.Idle += Application_Idle; 
     this.FormClosed += delegate { Application.Idle -= Application_Idle; }; 
    } 

    void Application_Idle(object sender, EventArgs e) { 
     bool focusOk = this.ActiveControl == SelectedLV; 
     bool selectOk = SelectedLV.SelectedIndices.Count == 1; 
     int index = selectOk ? SelectedLV.SelectedIndices[0] : -1; 
     MoveUpBtn.Enabled = focusOk && selectOk && index > 0; 
     MoveDownBtn.Enabled = focusOk && selectOk && index < SelectedLV.Items.Count-1; 
    } 
} 

不要忘記將焦點設置回按鈕的Click事件處理程序。別忘了ListView.HideSelection屬性。將其設置爲False,以便重點無關緊要。

+0

使用'Application。空閒()'不會發生在我身上。有趣的方法。 – LarsTech

2

的問題是,一旦你點擊移動按鈕,那麼你就是SelectedListView控制範圍之外,所以邏輯確實應該根據,如果你有一個正確的索引值與否:

private void SelectedLV_SelectedIndexChanged(object sender, EventArgs e) 
    if (SelectedLV.SelectedIndicies.Count == 0) { 
    MoveUpBtn.Enabled = false; 
    MoveDownBtn.Enabled = false; 
    } else { 
    // normal processing 
    } 
+0

謝謝,但這是我們在列表視圖中的時間的邏輯,點擊左右...我在上面的代碼中寫道,它的工作原理和禁用/啓用按鈕正確檢查第一個和最後一個項目的邊界...但不知道當我們點擊SelectedListViw時,編寫的最佳代碼是什麼?我這樣寫了:添加一個MOUSECLICK事件到AVAIABLE listview事件中,左邊的那個,讓這兩個按鈕都被禁用....仍然如果我們用TAB去了那裏,點擊... hmm.m – Bohn

相關問題