我有一個使用 Powershell 表單的作業腳本,為了方便起見,我從串列視圖中當前選定的專案中檢索值并將它們復制到剪貼板,如下所示:
$UIDlist.Add_SelectedIndexChanged({
# Legacy Winforms behaviour can cause an error unless a null check is made
If($UIDlist.SelectedItems -ne $null) {
[string]$ClipText = $this.SelectedItems.SubItems.Text | ForEach-Object{$_ "`r`n"}
$ClipText | Set-Clipboard
})
顯然,這只輸出子項的文本值,例如
johnsmith01
johnsmith@company.com
\\myserver\johnsmith01
GPO Main Office
是否有一種簡單的方法也可以獲取這些值的列名?例如
SamAccountName johnsmith01
EmailAddress johnsmith@company.com
HomeDrive \\myserver\johnsmith01
DepoartmentGPO GPO Main Office
NameListView subitems似乎有一個屬性,但在構造 ListView 時我找不到填充它的方法:
BackColor : Color [Window]
Bounds : {X=0,Y=0,Width=0,Height=0}
Font : [Font: Name=Microsoft Sans Serif, Size=8.25, Units=3, GdiCharSet=0, GdiVerticalFont=False]
ForeColor : Color [WindowText]
Tag :
Text : johnsmith01
Name :
那么在選擇 ListView 項時,是否有一種簡單的方法來檢索值和這些值的列名?
uj5u.com熱心網友回復:
串列視圖項的名稱不是列名稱。如果您想區分您呈現給用戶的內容(文本)和您將在幕后作業的實際價值,它就在那里。
要獲取列名,您需要自己制作解決方案。這是可行的方法。
在之前的某個地方宣告,Add_SelectedIndexChangedMethod所以它不會每次都被無故呼叫。
$ColumnsName = $ListView.Columns.Text
# Used for padded formatting
$LongestColLength = ($ColumnsName | % { $_.length } | Measure-Object -Maximum ).Maximum 1
$ListView.Items[0].SubItems.text
和實際$ClipText部分
$ClipText = for ($i = 0; $i -lt $ColumnsName.Count ;$i ) {
"{0}: {1} `r`n" -f $ColumnsName[$i].PadRight($LongestColLength, ' '), $this.SelectedItems.SubItems[$i].Text
}
輸出

根據您的代碼,我假設您想立即將其以漂亮的格式發送到剪貼板,但如果情況并非如此,我會改為生成您想要的 PSObject,以便您可以輕松地進行其他操作。
$ClipText = for ($i = 0; $i -lt $ColumnsName.Count ;$i ) {
[PSCustomObject]@{
ColumnName = $ColumnsName[$i]
Text = $this.SelectedItems.SubItems[$i].Text
}
}
只要準備好,您仍然可以將新形成的 PSObject 轉換為其最終格式。
用戶友好(利用最長的列長度進行填充)
$ClipText | % { '{0}: {1}' -f $_.ColumnName.PadRight($LongestColLength,' '),$_.Text}
機器友好
$ClipText | ConvertTo-Json
uj5u.com熱心網友回復:
在 Sage 的帖子中回答。在我的情況下,我需要添加以下內容以獲得正確的剪貼板格式和輸出:
[string]$ClipText = for ($i = 0; $i -lt $ColumnsName.Count ;$i ) {
'{0}: {1}' -f $ColumnsName[$i].PadRight($LongestColLength, ' '), $this.SelectedItems.SubItems[$i].Text "`r`n"
}
如果沒有[string]只有最后一個物件是在剪貼板中,也需要回車/換行符
我安裝了 PSCX 模塊,它修改了 Set-Clipboard 命令,所以 YMMV
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366845.html
上一篇:將自定義視圖添加到容器視圖的子視圖時,tableHeaderView重疊單元格
下一篇:任務不會被破壞并填滿記憶體
