Добавление функции «выбрать все» для выпадающего графического интерфейса - PullRequest
0 голосов
/ 29 октября 2019

У меня есть выпадающее меню с графическим интерфейсом, и я не могу понять, как добавить опцию «выбрать все месяцы».

Проблема довольно сложная, так как вывод «$ group» используется дляколичество различных вещей, таких как фильтр get-childitem, путь к файлу с переменной и система фильтрации и организации, использующая отдельные имена файлов и упорядочивающие их по месяцам. Так есть ли способ добавить вариант, как. Номера 01-12. Или есть более сложный графический интерфейс, который позволяет несколько вариантов выбора нескольких номеров?


[array]$DropDownArrayItems = "","01","02","03","04","05","06","07","08","09","10","11","12"
[array]$DropDownArray = $DropDownArrayItems | sort

# This Function Returns the Selected Value and Closes the Form

function Return-DropDown {
    if ($DropDown.SelectedItem -eq $null){
        $DropDown.SelectedItem = $DropDown.Items[0]
        $script:Choice = $DropDown.SelectedItem.ToString()
        $Form.Close()
    }
    else{
        $script:Choice = $DropDown.SelectedItem.ToString()
        $Form.Close()
    }
}

function SelectGroup{
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")


    $Form = New-Object System.Windows.Forms.Form

    $Form.width = 300
    $Form.height = 150
    $Form.Text = ”Select Filter Month”

    $DropDown = new-object System.Windows.Forms.ComboBox
    $DropDown.Location = new-object System.Drawing.Size(100,10)
    $DropDown.Size = new-object System.Drawing.Size(130,30)

    ForEach ($Item in $DropDownArray) {
     [void] $DropDown.Items.Add($Item)
    }

    $Form.Controls.Add($DropDown)

    $DropDownLabel = new-object System.Windows.Forms.Label
    $DropDownLabel.Location = new-object System.Drawing.Size(10,10) 
    $DropDownLabel.size = new-object System.Drawing.Size(100,40) 
    $DropDownLabel.Text = "Select Month:"
    $Form.Controls.Add($DropDownLabel)

    $Button = new-object System.Windows.Forms.Button
    $Button.Location = new-object System.Drawing.Size(100,50)
    $Button.Size = new-object System.Drawing.Size(100,20)
    $Button.Text = "OK"
    $Button.Add_Click({Return-DropDown})
    $form.Controls.Add($Button)
    $form.ControlBox = $false

    $Form.Add_Shown({$Form.Activate()})
    [void] $Form.ShowDialog()


    return $script:choice
}

$Group = $null
$Group = SelectGroup
while ($Group -like ""){
    $Group = SelectGroup
}
write-host $Group

Ответы [ 3 ]

1 голос
/ 29 октября 2019

Добавить опцию легко:

[array]$DropDownArrayItems = "", "01", "02", "03",
"04", "05", "06", "07", "08", "09", "10", 
"11", "12", 'Select all months'

Чтобы иметь array из integers в качестве вывода, можно сделать:

if ($Group -eq 'Select all months') {
    1..12 | ForEach-Object { '{0:00}' -f $_ }
}

Thiw выдаст:

01
02
03
04
05
06
07
08
09
10
11
12
0 голосов
/ 29 октября 2019

Если все, что вам нужно, это иметь опцию «все», то добавить кнопку или запись массива в поле со списком, который возвращает это и закрывает форму?

Если вы хотите иметь возможность выбора нескольких записей, например,1, 3, 6, 7, 8, то вместо этого я бы использовал просмотр списка с множественным выбором, поскольку затем вы можете вернуть их как объект, используя $ ListViewBox.SelectedItems.Text или аналогичный.

0 голосов
/ 29 октября 2019

Насколько я помню, System.Windows.Forms.ComboBox не поддерживает множественный выбор, почему бы не попробовать System.Windows.Forms.Listbox и установить режим system.windows.forms.selectionmode (None, One, MutiSimple,или MultiExtended)

...