回答(12)
2 years ago
我想你必须在这里循环 . 一次选择所有项目是一个非常具体(可能很少见)的用例,开箱即用提供该功能毫无意义 . 此外,无论如何,循环将只有两行代码 .
2 years ago
事实是 ListBox.Items 是一个普通的对象集合并返回普通的无类型对象,这些对象不能被多选(默认情况下) .
如果您想多选所有项目,那么这将有效:
for (int i = 0; i < myListBox.Items.Count;i++)
{
myListBox.SetSelected(i, true);
}
2 years ago
据我所知,使用任何.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));