2013-03-13 87 views
3

所有項目我想選擇ListBox中的所有項目,並提出了這個目的,這種擴展方法:選擇在ListBox WinForm控件

public static void SetSelectedAllItems(this ListBox ctl) 
    { 
     for (int i = 0; i < ctl.Items.Count; i++) 
     { 
      ctl.SetSelected(i, true); 
     } 
    } 

問題是,如果我有很多項目在列表框,完成這個任務需要很長時間,我可以看到ListBox是如何自動向下滾動並選擇項目的。

有沒有辦法臨時暫停控件的更新,這樣任務會更快完成?我試過使用:

ctl.SuspendLayout(); 
    for (int i = 0; i < ctl.Items.Count; i++) 
    ... 
ctl.ResumeLayout(); 

但是,這似乎並沒有做任何事情。

回答

7

調用BeginUpdateEndUpdate方法來防止在設置該控件的屬性時繪製/呈現控件。

下面是修改後的代碼:

public static void SetSelectedAllItems(this ListBox ctl) 
{ 
    ctl.BeginUpdate(); 

    for (int i = 0; i < ctl.Items.Count; i++) 
    { 
     ctl.SetSelected(i, true); 
    } 

    ctl.EndUpdate(); 
} 

你說,你已經打過電話SuspendLayoutResumeLayout,但隻影響控件的佈局事件。當您想要相對於其他控件更改控件的位置時,使用此對方法,例如當您設置SizeLocation,AnchorDock屬性時。