回答
我想你必须在这里循环。一次选择所有项目是一个非常具体的(可能很少见的)用例,在这种情况下,提供这种功能是没有意义的。此外,循环将只是两行代码。
事实是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. 如何选择所有项目在选择所有菜单项时选择黑莓的列表框复选框
- 4. 取消选择列表框中的所有项目
- 5. 选择/取消选择列表视图中的所有项目
- 6. 从列中选择所有项目
- 7. WPF列表框选择仅使用xaml的所有项目
- 8. 从列表框中选择项目XAML
- 9. 在列表框中选择项目
- 10. 移动在列表框中多选所有选中的项目
- 11. 使用jquery动态选择多选列表框中的所有项目
- 12. SQL从项目到所有者表中选择所有者的所有项目
- 13. 从先前选择的列表框中选择列表框项目
- 14. 为复选框选择列表视图的所有选项
- 15. 列表框ClearSelected法叶所选项目
- 16. C#列表框组选择的项目
- 17. 无法选择项目列表框:InvalidOperationException
- 18. 项目选择收缩列表框
- 19. C#列表框选择项目
- 20. WPF - 阻止列表框项目选择
- 21. XLwings选择列表框上的项目
- 22. 列表框从usercontrol选择的项目
- 23. 已冻结选择列表框项目
- 24. 保留列表框项目选择
- 25. 默认情况下选择选择列表框中的所有选项 - javascript
- 26. 删除选择时选择的项目会从列表框中
- 27. Flex:datagrid选择所有项目
- 28. Excel选择列表框中的所有条目Vba
- 29. 嵌套列表框:是否有可能在选择子列表框项目时恢复父列表框项目?
- 30. 选择包含所选项目的框
这应该是公认的答案。 – 2015-04-30 12:44:39