简体   繁体   English

如何将CheckedListBox中的Checked Items添加到Combobox(下拉列表)并在未选中时从Combobox中删除它们?

[英]How do I add Checked Items from a CheckedListBox to a Combobox (dropdown) and remove them from the Combobox when unchecked?

I should start by saying that i'm new to PowerShell and i'm still in the learning phase. 我应该首先说我是PowerShell的新手,我还处于学习阶段。 I've hit a road block and any help would be appreciated. 我遇到了障碍,任何帮助都会受到赞赏。

I have the following code: 我有以下代码:

# LOAD WINFORMS ASSEMBLY
[reflection.assembly]::LoadWithPartialName( "System.Windows.Forms")
[reflection.assembly]::LoadWithPartialName( "System.Drawing")

# CREATE FORMS
$Form = New-Object Windows.Forms.Form
$Form.text = "Post-Image Configuration Tool"

$Form.Width = 900
$Form.Height = 560
$Form.BackColor = "#3a73b8"
$Form.ForeColor = "White"
$Form.FormBorderStyle = "None"
$Form.StartPosition = "CenterScreen"

# START NETWORK CONFIGURATION PAGE
$GetConnectedAdapters = Get-WmiObject -Class Win32_NetworkAdapter -Filter "NetConnectionStatus = 2" | Select-Object NetConnectionID, Name, MACAddress

$netConfigList1 = New-Object System.Windows.Forms.CheckedListBox
$netConfigList1.Location = New-Object System.Drawing.Size(310,300) 
$netConfigList1.Size = New-Object System.Drawing.Size(480,180) 
$netConfigList1.Height = 100
$netConfigList1.BackColor = "#3a73b8"
$netConfigList1.ForeColor = "White"
$netConfigList1.BorderStyle = "None"
$netConfigList1.Font = $ListFont
$netConfigList1.add_SelectedIndexChanged({ListNetAdapters})

$netConfigListAdapters = @()
ForEach ($i in $GetConnectedAdapters.NetConnectionID){
    $GetAdapterName = Get-WmiObject -Class Win32_NetworkAdapter |Where {$_.NetConnectionID -eq $i} | Select-Object Name, NetConnectionID, MACAddress
    $AdapterName = $i +" - " + "("+ $GetAdapterName.Name +")"
    $netConfigListAdapters += ,$AdapterName
}
$netConfigList1.Items.AddRange($netConfigListAdapters)

$netConfigSubtext5 = New-Object Windows.Forms.Label
$netConfigSubtext5.Location = New-Object Drawing.Point 290,400
$netConfigSubtext5.Size = New-Object Drawing.Point 590,20
$netConfigSubtext5.text = "• Select the Standby Adapter:"
$netConfigSubtext5.font = $SubTextFont

$netConfigComboBox1 = New-Object System.Windows.Forms.ComboBox 
$netConfigComboBox1.Location = New-Object System.Drawing.Size(310,420) 
$netConfigComboBox1.Size = New-Object System.Drawing.Size(260,20)
$netConfigComboBox1.Font = $SubTextFont
$netConfigComboBox1.DropDownStyle = "DropDownList"

[void] $netConfigComboBox1.Items.Add("None (All Adapters Active)")

$NetConfiguration = $netConfigList1,$netConfigSubtext5,$netConfigComboBox1

# CREATE FUNCTIONS

Function ListNetAdapters
{
    $RemoveItems = @()
    $AddItems = @()

    for($index =0; $index -lt $netConfigList1.Items.Count; $index++)
    {
        $test = $netConfigList1.Items | Where-Object { $netConfigList1.Items.IndexOf($index) }

        if($netConfigList1.GetItemChecked($index) -AND $netConfigComboBox1.Items -notcontains $test)
        {
            $AddItems += ,$test 
        }
        ForEach($i in $netConfigComboBox1.Items){
            IF(($netConfigList1.CheckedItems -notcontains $i) -AND ($i -ne 'None (All Adapters Active)')){$RemoveItems += ,$i}
        }

    }
    ForEach ($i in $RemoveItems){$netConfigComboBox1.Items.Remove($i)}
    ForEach ($i in $AddItems){$netConfigComboBox1.Items.Add($i)}
}  


Function AddNetConfiguration
{
    ForEach ($i in $NetConfiguration){$form.controls.add($i)}
}


AddNetConfiguration


# DISPLAY FORM
$form.ShowDialog()

Basically, what i'm trying to accomplish is exactly what you would see in the Advanced Settings of a NIC Team in Windows Server 2012/2012 R2. 基本上,我想要完成的是您在Windows Server 2012/2012 R2中的NIC团队的高级设置中看到的内容。 I want the network adapters selected in the CheckedListBox to populate in the ComboBox and be removed if unchecked. 我希望在CheckedListBox中选择的网络适配器填充在ComboBox中,如果未选中则将其删除。

I've installed WMF 4.0 on my Windows 7 PC and this seems to work well, but I get "System.Object[]" in Windows Server 2012. So i'm apparently missing the big picture or doing something wrong. 我已经在我的Windows 7 PC上安装了WMF 4.0,这似乎运行良好,但我在Windows Server 2012中得到了“System.Object []”。所以我显然错过了大局或做错了什么。

Windows Server 2012附带PowerShell v3.0,您必须使用WMF4.0

Answer moved from question by editor 答案从编辑转移到问题

I was able to get it working after I fixed the $ListNetAdapters function. 修复$ListNetAdapters函数后,我能够使它工作。 I think I was over complicating it before. 我想以前我过于复杂了。

Function ListNetAdapters
{
    $RemoveItems = @()
    $AddItems = @()

    ForEach($checkedItem in $netConfigList1.CheckedItems){
        IF($netConfigComboBox1.Items -notcontains $checkedItem){$AddItems += ,$checkedItem}
    }

    ForEach($item2Badded in $AddItems){$netConfigComboBox1.Items.Add($item2Badded)}

    ForEach($dropdownItem in $netConfigComboBox1.Items){
        IF($netConfigList1.CheckedItems -notcontains $dropdownItem){$RemoveItems += ,$dropdownItem}
    }

    ForEach($item2Bremoved in $RemoveItems){
        IF($item2Bremoved -ne 'None (All Adapters Active)'){$netConfigComboBox1.Items.Remove("$item2Bremoved")}
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM