【问题标题】:Iterating over several GUI elements迭代几个 GUI 元素
【发布时间】:2017-12-08 23:42:58
【问题描述】:

我有一个基于 GUI 的表单,上面有一系列字段,并且希望在将文本输入到一个字段时更新相应的标签。我已经能够使用以下代码使其工作

$objTextBoxRD1.add_keyup({$objLabelLU1.Text = Get-Date})
$objTextBoxRD2.add_keyup({$objLabelLU2.Text = Get-Date})
$objTextBoxRD3.add_keyup({$objLabelLU3.Text = Get-Date})
$objTextBoxRD4.add_keyup({$objLabelLU4.Text = Get-Date})

有没有更优雅的方式来达到同样的效果?

我尝试了以下方法,但是当我在任何 $objTextBoxRD 字段中输入文本时,它只会更新 $objLabelU4

$Count = 1
foreach ($User in $ISDept) {
    $objTextBoxRD = Get-Variable -Name ('objTextBoxRD' + ([string]$Count)) | Select -Expand Value
    $objLabelLU = Get-Variable -Name ('objLabelLU' + ([string]$Count)) | Select -Expand Value

    $objTextBoxRD.add_keyup({$objLabelLU.Text = Get-Date})
    $Count++
}

$objTextBoxRD$objLabelLU 变量是从数组生成的,并且希望自动执行此部分,因为创建的变量数量可能会有所不同。

【问题讨论】:

    标签: powershell for-loop foreach repeat


    【解决方案1】:

    将您的文本框元素收集到一个数组中,而不是使用单个变量,因此您可以使用 for 循环对它们进行迭代。但是,由于您想在脚本块中使用相应的变量,您可能需要生成该脚本块。试试这个:

    for ($i=0; $i -lt $objTextBoxRD.Count; $i++) {
        $sb = [scriptblock]::Create("`$objLabelLU$($i+1).Text = Get-Date")
        $objTextBoxRD[$i].Add_Keyup($sb)
    }
    

    【讨论】:

    • 非常感谢,相关字段现在按预期更新,并且在用户被添加/从组中删除时不必担心编辑代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多