如何指示组合框已填充选择?

How do I indicate that a combo box has been populated with a selection?

我正在尝试在 Powershell 中创建一个表单。它包含一个 ComboBox 下拉选项,我将其用作必填字段。在选择一个选项之前,继续按钮将被禁用。这是 ComboBox 和启用按钮的代码:

$TSTypeBox.Name = "TSType"
$TSTypeBox.Location = New-Object System.Drawing.Point(116,100)
$TSTypeBox.Size = New-Object System.Drawing.Size(145,20)
$TSTypeBox.add_MouseHover($ShowHelp)
$TSTypeBox.DropDownStyle = "DropDownList"
Foreach ($item in ("1","2","3","4","5")) {
    $TSTypeBox.Items.Add($item) | Out-Null
    }
$TSTypeBox.SelectedItem = $TSLocation
$handler_TSTypeBox_SelectedIndexChanged= {
        If (($TSTypeBox.Text) -and ($ComputerNameBox.Text)) 
        {
            $OKButton.Enabled = 1
        }
        Else 
        {
            $OKButton.Enabled = 0
        }
    }
$TSTypeBox.add_SelectedIndexChanged($handler_TSTypeBox_SelectedIndexChanged)

这段代码特别符合预期,所以我对此并不担心。我在这里是关于我包含的 $TSTypeBox.SelectedItem = $TSLocation 行。我在其他地方有代码可以提取程序正在运行 运行 的计算机的 IP 地址,然后将其与 if/elseif/else 语句进行匹配以确定计算机是属于 1 还是 2,您可以看到这些选项已添加到上面代码中的 ComboBox。

if/else 语句更新了 $TSLocation 变量,然后我使用该变量强制选择 ComboBox 中的下拉选项之一。这也有效,但不幸的是它没有像我希望的那样启用继续按钮。我很难查找有关此的问题,因为它非常特别,而且我可能做错了(我对 Powershell 脚本编写的经验很少)。如果您对此有任何其他问题,请告诉我。谢谢!

好的,这可能说明了你的问题。

仅仅因为您将 SelectedItem 值设置为某个值,并不意味着 SelectedIndex 会发生变化

#
Add-Type -AssemblyName System.Windows.Forms -ErrorAction Stop
#
$TSLocation = '2'
#
$form = New-Object System.Windows.Forms.Form
$form.Text = "Test"
$form.MinimumSize = '430,495'
$form.MaximumSize = '430,545'
$form.StartPosition = 'CenterScreen'
#
# Add form objects
#
$TSTypeBox = New-Object System.Windows.Forms.ComboBox
$TSTypeBox.Name = "TSType"
$TSTypeBox.Location = '116,100'
$TSTypeBox.Size = '145,20'
$TSTypeBox.add_MouseHover($ShowHelp)
$TSTypeBox.DropDownStyle = "DropDownList"
Foreach ($item in ("1","2","3","4","5")) {
    $TSTypeBox.Items.Add($item) | Out-Null
    }

$ComputerNameBox = New-Object System.Windows.Forms.TextBox
$ComputerNameBox.Location = '120,20'
$ComputerNameBox.Size = '120,17'
$ComputerNameBox.Text = 'test'

$OutputBox = New-Object System.Windows.Forms.TextBox
$OutputBox.Location = '120,240'
$OutputBox.Size = '120,17'

$OkButton = New-Object System.Windows.Forms.Button
$OkButton.Location = '120,200'
$OkButton.Size = '54,24'
$OkButton.Text = 'OK'

$form.controls.AddRange(@($TSTypeBox,$OkButton,$ComputerNameBox,$OutputBox))
#
# Main Script goes here
#
$handler_TSTypeBox_SelectedIndexChanged= {
    $OutputBox.Text = "SelectedIndex is " + $TSTypeBox.SelectedIndex
        If (($TSTypeBox.Text) -and ($ComputerNameBox.Text)) 
        {
            $OKButton.Enabled = 1
        }
        Else 
        {
            $OKButton.Enabled = 0
        }
    }
$TSTypeBox.add_SelectedIndexChanged($handler_TSTypeBox_SelectedIndexChanged)

#
$TSTypeBox.SelectedIndex = $TSTypeBox.FindStringExact($TSLocation)
#
# Show form
$form.ShowDialog() | Out-Null
$form.Dispose()
# End

如有疑问,最好始终简化您的脚本并添加调试、日志记录或显示正在更改的值的输出

现在问题很清楚了 - 这篇文章为您指明了正确的方向:

How do I set the selected item in a comboBox to match my string using C#?