回答
我想你必須在這裏循環。一次選擇所有項目是一個非常具體的(可能很少見的)用例,在這種情況下,提供這種功能是沒有意義的。此外,循環將只是兩行代碼。
事實是ListBox.Items
是一個普通的對象集合,並返回普通無類型的對象,不能是多選擇的(默認)。
如果你想多選擇所有項目,那麼這將工作:
for (int i = 0; i < myListBox.Items.Count;i++)
{
myListBox.SetSelected(i, true);
}
我已經看到了一些(類似的)回答所有這一切在邏輯上做同樣的事情,我很困惑,爲什麼還他們都不爲我工作。關鍵是將列表框的SelectionMode
設置爲SelectionMode.MultiSimple
。它不適用於SelectionMode.MultiExtended
。考慮到選擇列表框多個項目,你將不得不選擇模式設置爲多點模式,而且大多人去的傳統MultiExtended
風格,這個答案應該有很大的幫助。雅不是foreach
,但for
。
你應該真正做到這一點:
lb.SelectionMode = SelectionMode.MultiSimple;
for (int i = 0; i < lb.Items.Count; i++)
lb.SetSelected(i, true);
lb.SelectionMode = //back to what you want
OR
lb.SelectionMode = SelectionMode.MultiSimple;
for (int i = 0; i < lb.Items.Count; i++)
lb.SelectedIndices.Add(i);
lb.SelectionMode = //back to what you want
如果添加'e.SuppressKeyPress = true;'它應該工作,不管SelectionMode。 – 2014-12-24 14:14:57
我用Mika的解決方案,但是如果你有上千項這可能是非常緩慢的。爲了大幅度提高速度,您可以暫時關閉可視性。列表框在操作過程中不會真正消失,因爲您可能會懷疑,但在我的情況下,選擇速度至少快10倍。
我相信'myListBox.Visible = false'更快,因爲它避免了更新時的繪圖。我會使用提供的方法'myListBox.BeginUpdate()'和'myListBox.EndUpdate()':) – DiogoNeves 2012-05-22 09:09:48
+1來評論DiogoNeves。它更好,因爲它也會導致焦點留在列表框中。對於Robin的解決方案,必須在將其設置爲可見後再調用myListBox.Focus()。 – huha 2014-03-04 08:24:00
據我所知,使用任何的.NET方法來選擇大量項目是遠遠超過進行直接PInvoke的呼叫,傳入消息LB_SETSEL(0x185),以控制慢,與表明是否要選擇一個標誌(1)或取消(0)以及魔法值(-1),這表明變化應適用於所有項目。
[DllImport("user32.dll", EntryPoint = "SendMessage")]
internal static extern IntPtr SendMessage(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam);
// Select All
SendMessage(listBox.Handle, 0x185, (IntPtr)1, (IntPtr)(-1));
// Unselect All
SendMessage(listBox.Handle, 0x185, (IntPtr)0, (IntPtr)(-1));
不錯的嘗試。它確實選擇了所有項目,但項目枚舉失敗。問題是,在SendMessage選擇所有項目後,我得到SelectedItems.Count顯示所有列表框項目的計數(這是正確的)。但是當我試圖枚舉SelectedItems時 - 只執行一次迭代。當我執行'SelectedItems [SelectedItems.Count - 1]'拋出IndexOutOfRange異常。似乎選擇了項目,但列表框不會刷新與它們的內部列表。要計算'SelectedObjectCollection.Count'屬性getter發送另一個返回所有項目計數的窗口消息。 – oleksa 2014-06-06 13:59:00
-1不是那麼神奇,請參閱[LB_SETSEL消息(Windows)](http://msdn.microsoft.com/de-de/library/windows/desktop/bb761352%28v=vs.85%29.aspx) 。順便說一句:它適用於VCL類TListBox。 – Wolf 2015-01-15 12:19:30
嗨,@狼。術語「魔術」在編程中有特別的意義;請參閱http://en.wikipedia.org/wiki/Magic_number_(programming) – EricLaw 2015-01-15 17:13:23
private void Button_Click(object sender, RoutedEventArgs e)
{
listbox.SelectAll();
}
哪個版本的.Net是這個? – 2014-10-27 00:10:42
WinForms列表框中沒有SelectAll方法。你可能正在考慮WPF列表框,但這個問題被標記爲「winforms」和「.net-2.0」。 – 2014-12-24 13:19:11
這絕對不是好的,但不是一個循環,如果你有很多很多(100+)項目快得多: 選擇列表框和模擬[家居]鍵輸入[SHIFT] + [結束]
lb.BeginUpdate();
lb.Select();
SendKeys.Send("{Home}");
SendKeys.Send("+{End}");
lb.EndUpdate();
編輯:用SelectionMode.MultiExtended只能我猜
DoubleEDit:也意識到這可能是代碼lb.selecteditems戰後正在執行太慢ds,但對於用戶點擊的[Select All]按鈕可能會有用。
不適用於我(使用.Net 4.7)。列表框只是閃爍,就是這樣。 – 2017-10-26 15:49:14
在這個構造函數,你需要啓用所需的文本框的多選擇模式(MultiExtended
)。
public Form1()
{
InitializeComponent();
listBox1.SelectionMode = SelectionMode.MultiExtended;
listBox2.SelectionMode = SelectionMode.MultiExtended;
}
在此之後,使用循環選擇一切:
private void selectAll_Click(object sender, EventArgs e)
{
for (int val = 0; val < listBox1.Items.Count; val++)
{
listBox1.SetSelected(val, true);
}
}
我測試了它。有用。您還可以使用[CTRL/SHIFT]按鈕+左擊單獨選擇項目。
選擇全部是definetly現成可用的:
$("#ListBoxID option").prop("selected", true);
該問題是爲winforms而不是網絡 – 2017-02-19 23:41:12
此代碼也不是開箱即用。列出的代碼是jQuery,而不是C#/ VB.NET – fujiiface 2017-06-14 22:27:44
我知道這個問題被打上.NET 2.0,但如果你有LINQ提供給您的3.5+,你可以做以下:
ASP.NET的WebForms
var selected = listBox.Items.Cast<System.Web.UI.WebControls.ListItem>().All(i => i.Selected = true);
點
的WinForms
var selected = listBox.SelectedItems.Cast<int>().ToArray();
不 - 我得到無法找到類型或名稱ListItem。 (您是否缺少Using指令或程序集引用)。 – 2017-10-26 15:50:54
看起來有點過分,可能會降低解決方案的效率,而不是與個人合作,找出解決方案爲什麼不適合您。你有沒有提到缺少使用指令'使用System.Web.UI.WebControls;'?您是否參考裝配體?答覆已更新以引用裝配體。 – fujiiface 2017-10-26 16:28:51
對不起fujiface - 我再次提醒你。我最初以爲你在2014年寫了你的帖子,所以我沒有期待回覆。我似乎無法訪問System.Web.UI.WebControls。我只能看到System.Web。我試圖添加一個引用,但它並沒有顯示在那裏。也許它在4.7中被棄用了?我查找了一個名稱爲NuGet的軟件包,但這也不在其中。 – 2017-10-26 16:35:41
- 1. 如何選擇所有項目在選擇所有菜單項時選擇黑莓的列表框複選框
- 2. 從列中選擇所有項目
- 3. WPF列表框選擇僅使用xaml的所有項目
- 4. 從列表框中選擇項目XAML
- 5. 在列表框中選擇項目
- 6. 移動在列表框中多選所有選中的項目
- 7. 使用jquery動態選擇多選列表框中的所有項目
- 8. SQL從項目到所有者表中選擇所有者的所有項目
- 9. 爲複選框選擇列表視圖的所有選項
- 10. 列表框ClearSelected法葉所選項目
- 11. C#列表框組選擇的項目
- 12. 列表框從usercontrol選擇的項目
- 13. 保留列表框項目選擇
- 14. C#列表框選擇項目
- 15. 項目選擇收縮列表框
- 16. WPF - 阻止列表框項目選擇
- 17. XLwings選擇列表框上的項目
- 18. 默認情況下選擇選擇列表框中的所有選項 - javascript
- 19. 刪除選擇時選擇的項目會從列表框中
- 20. Flex:datagrid選擇所有項目
- 21. Excel選擇列表框中的所有條目Vba
- 22. 嵌套列表框:是否有可能在選擇子列表框項目時恢復父列表框項目?
- 23. 選擇包含所選項目的框
- 24. 從休眠列表中選擇所有項目
- 25. 如何選擇列表框中的所有項目真的很快?
- 26. 你如何取消選擇使用jQuery的列表框中的所有項目
- 27. C#選擇列表框中的所有項目 - 暫停事件處理
- 28. 通過選中的列表框並檢查所有項目C#
- 29. 列表框中的按鈕ItemTemplate沒有選擇項目
- 30. 實體框架選擇項目位置在有序列表中
這應該是公認的答案。 – 2015-04-30 12:44:39