【发布时间】:2016-06-22 15:24:23
【问题描述】:
我在 PowerShell 中构建的表单上有一个 ListView,但我无法对其进行排序。
如果我从命令行调用 $LV.Sort()(虽然没有显示表单),它工作得非常好。但是,如果我尝试在表单上的任何内容上的 OnClick 事件中调用它,它不会。我已经设置了标志,并且我知道那段代码正在运行,它只是没有做任何事情或标记任何错误。
显然$LV.Sorting = "Ascending" 已设置,否则它根本不会排序,我可以更改项目以便对 ListView 的引用很好。还尝试在出现线程问题时调用,但没有什么不同。
令人讨厌的是,由于很多人忘记设置 Sorting 属性,这是一个棘手的研究课题。
编辑:不确定是否相关,但使用 ShowDialog() 调用表单
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$form = New-Object System.Windows.Forms.Form
$LVserverlist = New-Object System.Windows.Forms.ListView
$form.Controls.Add($LVserverlist)
$LVserverlist.Dock = "Fill"
$LVserverlist.View = "Details"
$LVserverlist.Sorting = "Ascending"
$LVserverlist.Add_ColumnClick({ $LVserverlist.sort(); $LVserverlist.Items[0].Text = "Working?" })
$LVserverlist.Columns.Add("Name", 200, "Left") | Out-Null
0..10 | Foreach-Object {
$LVItem = New-Object System.Windows.Forms.ListViewItem
$LVItem.Text = (Get-Random -Maximum 1000).ToString()
$LVserverlist.Items.Add($LVItem) | Out-Null
}
$form.ShowDialog()
【问题讨论】:
-
可能是范围问题。请向我们展示您的代码
-
我有大约一千行代码。所有相关的是 ListView 位于 Form 内的 Splitter 内的 Splitter 中,以
ShowDialog()显示。如果我将Sort()添加到任何 OnClick 事件中,它什么也不做,但事件中的其余代码运行良好。将ListView作为参数传递或使用全局引用都没有关系,我可以在其中添加和更改项目。 -
制作一个能重现错误的小应用程序,然后发布:)(请参阅the
MVCEsection of the Help Center) -
添加了复制问题的代码。单击列,第一项更改为“工作?”正如预期的那样,但没有排序。关闭表单,在提示符下调用
$LVserverlist.Sort(),再次显示表单,列表排序。
标签: winforms sorting listview powershell