Winform: исправление проблем со списком - PullRequest
0 голосов
/ 17 февраля 2020

Я работаю над формой Windows, используя Powershell, который будет запрашивать сервер печати для всех установленных принтеров (функция: FetchPrinters). У меня есть кнопка, добавленная для запуска функции FetchPrinters.

Function:

    $Global:PrintServer = ""
function FetchPrinters {
    $printerTxtFileLocation = 'C:\Temp\PrinterList.csv'
    $outputBox.text = "Fetching list of printers on $Global:PrintServer"
    # $Global:PrintServer = $Global:DropDownBox1.SelectedItem.ToString()
    Get-Printer -ComputerName "$Global:PrintServer" | Select-Object -ExpandProperty Name | Sort-Object -CaseSensitive | Out-File -Force -Encoding utf8 -FilePath "$printerTxtFileLocation"
    $PrinterList = Get-Content -Path "$printerTxtFileLocation" -Encoding UTF8 -Force
    foreach ($Printer in $PrinterList) {
        $DropDownBox2.ResetText()
        [void] $DropDownBox2.Items.Add($Printer)
    }
}

В Dropdownbox1 будет список сайтов (местоположение), которые при выборе будут определять, какой сервер печати будет запрашивать.

    $DropDownBox1 = New-Object System.Windows.Forms.ComboBox 

$DropDownBox1.Text = "Select Site Name"

$DropDownBox1.Size = New-Object System.Drawing.Size(190, 20)

$DropDownBox1.Location = New-Object System.Drawing.Point(20, 20)

$Sites = @(

    'Site 1',

    'Site 2',

    'Site 3',

    'Site 4',

    'Site 5',

    'Site 6'

    'Site 7'

)


ForEach ($Site in $Sites) {

    $DropDownBox1.Items.Add($Site) | Out-Null

}


$Global:DropDownBox1_SelectedIndexChanged = {

    Switch ($DropDownBox1.Text) {

        'Site 1' { $Global:PrintServer = "\\Printserver1" }

        'Site 2' { $PrintServer = "\\Printserver2" }

        'Site 3' { $PrintServer = "\\Printserver3" }

        'Site 4' { $PrintServer = "\\Printserver3" }

        'Site 5' { $PrintServer = "\\Printserver4" }

        'Site 6' { $PrintServer = "\\Printserver5" }

        'Site 7' { $PrintServer = "\\Printserver6" }

    }

}

$DropDownBox1.add_SelectedIndexChanged($Global:DropDownBox1_SelectedIndexChanged)

$Form.Controls.Add($DropDownBox1)

В Dropdownbox2 будет список доступных для установки принтеров

    $DropDownBox2 = New-Object System.Windows.Forms.ComboBox

$DropDownBox2.Text = "Select the Printer to install"

$DropDownBox2.Location = New-Object System.Drawing.Size(20, 60) 

$DropDownBox2.Size = New-Object System.Drawing.Size(180, 20) 

$DropDownBox2.DropDownHeight = 200


$DropDownBox2.add_SelectedIndexChanged({ })

$Form.Controls.Add($DropDownBox2)

Как есть, все работает нормально, я могу выбрать сайт в Drowndownbox1, нажать кнопку «Принять принтеры», Dropdownbox2 показывает доступные принтеры для этого сайта.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь выбрать другой сайт (в той же форме) и нажимаю кнопку «Принтеры извлечения», переменная $ Printers сохраняет свои старые данные, которые выглядят как Таким образом, Dropdownbox2 содержит принтеры из предыдущего запроса и текущий.

В идеале, когда я выбираю сайт, нажимаю на выбор принтеров, dropdownbox2 содержит информацию только для этого сайта.

Я пробовал с помощью командлета Clear-Variable, но, похоже, он не работает, но также возможно, что я делаю что-то не так, а не думать об этом правильно.

любая помощь очень ценится.

1 Ответ

1 голос
/ 17 февраля 2020

Похоже, добавление:

$dropdownbox2.Items.Clear() 

... к моей функции делает то, что мне нужно. Мог бы поклясться, что я попробовал это, но, возможно, синтаксис был неправильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...