gpt4 book ai didi

powershell - 如何引用列表框项目

转载 作者:行者123 更新时间:2023-12-02 18:18:14 24 4
gpt4 key购买 nike

有时事情(PowerShell?)对我来说......

在这种情况下,我想更改 WinForms ListBoxText 属性按其索引选择的项目(不是 SelectedItems )。这里的要点是 $ListBox.Items[$CurrentIndex] 似乎是 [string] 类型而不是 [Item]输入...
为此我创建了一个 mcve (带有上下文菜单)来 self 的更大项目:

using namespace System.Windows.Forms
$Form = [Form]@{ StartPosition = 'CenterScreen' }
$ListBox = [ListBox]@{}
@('one', 'two', 'three').ForEach{ $Null = $ListBox.Items.Add($_) }
$Form.Controls.Add($ListBox)
$ListBox.ContextMenuStrip = [ContextMenuStrip]@{}
$Context = $ListBox.ContextMenuStrip.Items.Add('ToUpper')
$ListBox.Add_MouseDown({ param($s, $e)
if ($e.Button -eq 'Right') { $Script:CurrentIndex = $ListBox.IndexFromPoint($e.Location) }
})
$Context.Add_Click({ param($s, $e)
if ($Null -ne $CurrentIndex) {
$Text = $ListBox.Items[$CurrentIndex]
Write-Host "I want to change text ""$Text"" of the item #$CurrentIndex to: ""$($Text.ToUpper())"""
# $ListBox.Items.Item[$CurrentIndex] = $Text.ToUpper()
}
})
$Form.ShowDialog()

如何更改例如的文本$ListBox.Items[1] (“two”) 例如“两个”?
我实际上不确定这是否是 PowerShell 相关问题(类似于 #16878 Decorate dot selected Xml strings (leaves) with XmlElement methods,我可以选择使用 SelectNodes() 方法)或与 WinForms 本身相关:答案可能在 Gwt Listbox item reference to an Object在这种情况下,我不知道如何将其转换为 PowerShell。

最佳答案

可以使用$ListBox.Items.Item($CurrentIndex) = $Text.ToUpper()修改存储的项目值 - 但要修改集合项目不会触发重新绘制 ListBox 控件,因此看起来好像没有发生任何更改。

相反,修改集合本身 - 删除旧条目并在同一位置插入新条目:

$Context.Add_Click({ param($s, $e)
if ($Null -ne $CurrentIndex) {
$Text = $ListBox.Items[$CurrentIndex]
# Remove clicked item
$ListBox.Items.RemoveAt($CurrentIndex)
# Insert uppercased string value as new item at the same index
$ListBox.Items.Insert($CurrentIndex, $Text.ToUpper())
}
})

这将导致所属控件刷新,并且更改将立即反射(reflect)在 GUI 中

关于powershell - 如何引用列表框项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71237758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com