【问题标题】:Populate combobox based on selection of another combobox - Powershell根据选择的另一个组合框填充组合框 - Powershell
【发布时间】:2020-11-16 04:40:27
【问题描述】:

我正在创建一个带有两个组合框的 powershell GUI。 第一个包含国家,第二个应该根据在第一个组合框中选择的国家/地区填充城市

例如,当在组合框 1 中选择“美国”时,“纽约”、“底特律”和“西雅图”应该出现在组合框 2 中,当在组合框 1 中选择“英格兰”时,“伦敦”和“埃塞克斯”应该出现在combobox2等等

这是我的脚本的一个非常简短的版本:

$Countries=@("USA","England","Canada")

$CitiesUS=@("New York","Detroit","Seattle")
$CitiesEN=@("London","Essex")
$CitiesCA=@("Toronto","Vancouver")

$Form                                  =      New-Object System.Windows.Forms.Form
$Form.Size                             =      New-Object System.Drawing.Size(300,300)  
$Combobox1                             =      New-Object System.Windows.Forms.Combobox
$Combobox1.Location                    =      New-Object System.Drawing.Size(26,50)  
$Combobox1.Size                        =      New-Object System.Drawing.Size(105,20)
$Combobox1.items.AddRange($Countries)
$combobox2                             =      New-Object System.Windows.Forms.Combobox
$combobox2.Location                    =      New-Object System.Drawing.Size(143,50)  
$combobox2.Size                        =      New-Object System.Drawing.Size(105,20)
$Form.Controls.Add($combobox1)
$Form.Controls.Add($combobox2)

## combobox function

if     ($combobox1.SelectedItem -eq ("USA")) {
       $combobox2.Items.Clear()
       foreach ($City in $CitiesUS) {
       $combobox2.Items.Add($City)}
       }

$Form.ShowDialog()

为了这个例子,我为一个国家添加了一个简单的 IF 语句,但即使这样也不起作用。 几天来我一直在研究如何做到这一点,但找不到任何东西或无法完全理解某些解决方案。有一些简单的方法可以做到这一点吗?

感谢任何帮助!

【问题讨论】:

  • 表单只会在活动期间更新 - 它不会坐在那里检查您的“IF”语句以查看是否有任何更改。为正在更改的第一个组合框添加一个事件,并将您的代码放入该事件以填充第二个组合框。

标签: powershell combobox


【解决方案1】:

见我上面的评论,类似这样:

$Countries=@("USA","England","Canada")

$CitiesUS=@("New York","Detroit","Seattle")
$CitiesEN=@("London","Essex")
$CitiesCA=@("Toronto","Vancouver")

$Form                                  =      New-Object System.Windows.Forms.Form
$Form.Size                             =      New-Object System.Drawing.Size(300,300)  
$Combobox1                             =      New-Object System.Windows.Forms.Combobox
$Combobox1.Location                    =      New-Object System.Drawing.Size(26,50)  
$Combobox1.Size                        =      New-Object System.Drawing.Size(105,20)
$Combobox1.items.AddRange($Countries)
$combobox2                             =      New-Object System.Windows.Forms.Combobox
$combobox2.Location                    =      New-Object System.Drawing.Size(143,50)  
$combobox2.Size                        =      New-Object System.Drawing.Size(105,20)
$Form.Controls.Add($combobox1)
$Form.Controls.Add($combobox2)
# Populate Combobox 2 When Combobox 1 changes
$ComboBox1_SelectedIndexChanged= {
    $combobox2.Items.Clear() # Clear the list
    $combobox2.Text = $null  # Clear the current entry
    Switch ($ComboBox1.Text) {
        "USA" {        
            $CitiesUS | ForEach { $combobox2.Items.Add($_) }
        }
        "England" {
            $CitiesEN | ForEach { $combobox2.Items.Add($_) }
        }
        "Canada" {
            $CitiesCA | ForEach { $combobox2.Items.Add($_) }
        }
    }
}

$ComboBox1.add_SelectedIndexChanged($ComboBox1_SelectedIndexChanged)

$Form.ShowDialog()

【讨论】:

  • 非常感谢!这很有帮助,而且效果很好
猜你喜欢
  • 1970-01-01
  • 2016-01-29
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多