ComboBox1 선택에 따라 ComboBox2 채우기
며칠 동안 여러 옵션을 검색하고 시도했지만 실제로는 작동하지 않습니다. 이전 코드가 게시되었습니다.
XAML에서 모든 개체를 가져 왔습니다 (모두 변수로 설정 됨). 그게 문제가 될지 모르겠습니다. 다른 모든 것이 제대로 작동하는 것 같기 때문에 나는 생각하지 않습니다.
Tab2CBB2가 Tab1CBB1의 선택에 따라 값을 표시하기를 원합니다. 누구든지 도울 수 있습니까? (전체 코드를 붙여 넣지 않았고 경로도 붙여 넣지 않았지만 아마 도움이 될 것입니다). 내 여러 시도 중 두 가지입니다. 감사
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$xaml = @" ... "@ #Read XAML (Parse it) $reader=(New-Object System.Xml.XmlNodeReader $XAML) $Window=[Windows.Markup.XamlReader]::Load( $reader ) $listQA14 = Get-ChildItem $pathQA14 -name $listQA15 = Get-ChildItem $pathQA15 -name $listDBQA = Get-ChildItem $pathDBQA -name $Tab1CBB1_SelectedIndexChanged= {
$Tab1CBB2.Items.Clear() # Clear the list $Tab1CBB2.Text = $null # Clear the current entry Switch ($Tab1CBB1.Text) {
'QA14' {
$ListQA14 | ForEach { $Tab1CBB2.Items.Add($_) } } 'QA15' { $ListQA15 | ForEach { $Tab1CBB2.Items.Add($_) }
}
'ARIELDBQA' {
$ListDBQA | ForEach { $Tab1CBB2.Items.Add($_) } } } } $Tab1CBB1.add_SelectedIndexChanged($Tab1CBB1_SelectedIndexChanged) #Displays the Window $Window.ShowDialog() | out-null
시도 된 또 다른 옵션은 다음과 같습니다.
#ComboBox1------
$ItemsCBB1 = @('ARIELDBQA','QA14','QA15') foreach ($Item in $ItemsCBB1) { $Tab1CBB1.Items.Add($Item) } #ComboBox2------- if ($Tab1CBB1.SelectedItem -eq 'QA14') {
$Tab1CBB2.Items.Clear() foreach ($Serie in $listQA14) { $Tab1CBB2.Items.Add($Serie) } } elseif ($Tab1CBB1.SelectedItem -eq 'QA15') {
$Tab1CBB2.Items.Clear() foreach ($Serie in $listQA15) { $Tab1CBB2.Items.Add($Serie) } } elseif ($Tab1CBB1.SelectedItem -eq 'listDBQA') {
$Tab1CBB2.Items.Clear() foreach ($Serie in $listDBQA) { $Tab1CBB2.Items.Add($Serie)
}
}
이것을 시도했습니다 : $ Selection = $Tab1CBB1.SelectedItem.ToString() Variable $선택은 'if'뒤에 있지만 작동하지 않음 현재 선택이 무엇인지 표시하면 제대로 작동합니다. 문제는 클릭 할 때 선택을 '녹음'하는 데서 오는 것 같습니다. Thnaks!
답변
기본적으로 스크립트$Tab1CBB1_SelectedIndexChanged
블록 내에서 스크립트 범위 지정 과 함께 다양한 목록을 사용하기 만하면됩니다 .
그렇지 않으면 스크립트 블록 내에서 변수를 알 수 없습니다.
$Tab1CBB1_SelectedIndexChanged = {
$Tab1CBB2.Items.Clear() # Clear the list $Tab1CBB2.Text = $null # Clear the current entry switch ($Tab1CBB1.Text) {
'QA14' { $script:ListQA14 | ForEach-Object { $Tab1CBB2.Items.Add($_) } } 'QA15' { $script:ListQA15 | ForEach-Object { $Tab1CBB2.Items.Add($_) } }
'ARIELDBQA' { $script:ListDBQA | ForEach-Object { $Tab1CBB2.Items.Add($_) } }
}
}
또 다른 방법은 콤보 박스에 입력 할 항목을 동적으로 가져 오는 것입니다. 특히 이러한 항목은 파일 목록이고 양식이 사용되는 동안 변경 될 수 있기 때문입니다.
$Tab1CBB1_SelectedIndexChanged = {
$Tab1CBB2.Items.Clear() # Clear the list $Tab1CBB2.Text = $null # Clear the current entry switch ($Tab1CBB1.Text) {
'QA14' { $path = $script:pathQA14 ; break }
'QA15' { $path = $script:pathQA15 ; break }
'ARIELDBQA' { $path = $script:pathDBQA }
}
Get-ChildItem -Path $path -Name | ForEach-Object { $Tab1CBB2.Items.Add($_) }
}
당신이 추구하는 것의 간단한 예는 이와 같은 것입니다.
### Powershell populate ComboBox 2 based on ComboBox 1 Selection
Add-type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$form1 = New-Object 'System.Windows.Forms.Form' $labelDoubleClickOnAnyItem = New-Object 'System.Windows.Forms.Label'
$listbox2 = New-Object 'System.Windows.Forms.ListBox' $listbox1 = New-Object 'System.Windows.Forms.ListBox'
$buttonOK = New-Object 'System.Windows.Forms.Button' $form1_Load={
$items=1..9 | ForEach-Object {"List item $_"}
$listbox1.Items.AddRange($items)
}
$listbox1_MouseDoubleClick=[System.Windows.Forms.MouseEventHandler]{ $listbox2.Items.Add($listbox1.SelectedItem) $listbox1.Items.Remove($listbox1.SelectedItem) } $listbox2_MouseDoubleClick=[System.Windows.Forms.MouseEventHandler]{
$listbox1.Items.Add($listbox2.SelectedItem)
$listbox2.Items.Remove($listbox2.SelectedItem)
}
$form1.Controls.Add($labelDoubleClickOnAnyItem)
$form1.Controls.Add($listbox2)
$form1.Controls.Add($listbox1)
$form1.Controls.Add($buttonOK)
$form1.AcceptButton = $buttonOK
$form1.ClientSize = '378, 388' $form1.FormBorderStyle = 'FixedDialog'
$form1.MaximizeBox = $False
$form1.MinimizeBox = $False
$form1.Name = 'form1' $form1.StartPosition = 'CenterScreen'
$form1.Text = 'Form' $form1.add_Load($form1_Load) $labelDoubleClickOnAnyItem.Font = 'Microsoft Sans Serif, 9.75pt, style=Bold, Italic'
$labelDoubleClickOnAnyItem.Location = '13, 13' $labelDoubleClickOnAnyItem.Name = 'labelDoubleClickOnAnyItem'
$labelDoubleClickOnAnyItem.Size = '353, 41' $labelDoubleClickOnAnyItem.TabIndex = 3
$labelDoubleClickOnAnyItem.Text = 'Double click on any item to move it from one box to the other.' $listbox2.FormattingEnabled = $True $listbox2.Location = '200, 67'
$listbox2.Name = 'listbox2' $listbox2.Size = '166, 277'
$listbox2.Sorted = $True
$listbox2.TabIndex = 2 $listbox2.add_MouseDoubleClick($listbox2_MouseDoubleClick) $listbox1.FormattingEnabled = $True $listbox1.Location = '12, 67'
$listbox1.Name = 'listbox1' $listbox1.Size = '167, 277'
$listbox1.Sorted = $True
$listbox1.TabIndex = 1 $listbox1.add_MouseDoubleClick($listbox1_MouseDoubleClick) $buttonOK.Anchor = 'Bottom, Right'
$buttonOK.DialogResult = 'OK' $buttonOK.Location = '291, 353'
$buttonOK.Name = 'buttonOK' $buttonOK.Size = '75, 23'
$buttonOK.TabIndex = 0 $buttonOK.Text = '&OK'
$form1.ShowDialog()
또는 ComboBox 요소 만 사용하여
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$Form = New-Object system.Windows.Forms.Form
$Form.ClientSize = New-Object System.Drawing.Point(498,459) $Form.text = 'Form'
$Form.TopMost = $false
$Form.StartPosition = 'CenterScreen' $ComboBox1 = New-Object system.Windows.Forms.ComboBox
$ComboBox1.text = '' $ComboBox1.width = 216
$ComboBox1.height = 75 @('ComboxItem1','ComboxItem2','ComboxItem3') | ForEach-Object {[void] $ComboBox1.Items.Add($_)} $ComboBox1.location = New-Object System.Drawing.Point(31,41)
$ComboBox1.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10) $ComboBox2 = New-Object system.Windows.Forms.ComboBox
$ComboBox2.text = '' $ComboBox2.width = 213
$ComboBox2.height = 38 $ComboBox2.location = New-Object System.Drawing.Point(32,73)
$ComboBox2.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10) Function Add-ItemToComboBox2 { $ComboBox2.Items.Add($ComboBox1.SelectedItem) $ComboBox2.Refresh()
}
$Form.controls.AddRange( @( $ComboBox1,
$ComboBox2 ) ) $ComboBox1.Add_SelectedIndexChanged({ Add-ItemToComboBox2 })
[void]$Form.ShowDialog()
GUI를 디자인하고 구현하는 데 사용중인 UX / UI 도구를 명시하지 않았습니다. 그러나 하드 코딩도 도전 일뿐입니다. 따라서 UX / UI 작업에 이들 중 하나를 사용하는 것이 좋습니다. UX / UI는 PowerShell 코드 (또는 다른 언어)가 있든 상관없이 작동해야합니다. 구현할 수있는 UX / UI에 관계없이 PowerShell 코드가 작동해야합니다. UX / UI 코드는 운영 코드와 분리되어야합니다. UX / UI에서 작업 코드를 호출합니다.
비어 있는:
https://poshgui.com
https://www.youtube.com/results?search_query=poshgui
https://visualstudio.microsoft.com/vs/community
VS에 대한 라이센스 계약을 철저히 읽으십시오.
https://www.youtube.com/results?search_query=vs+2019+community+winforms
매수
https://ironmansoftware.com/psscriptpad
https://www.youtube.com/results?search_query=psscriptpad
https://ironmansoftware.com/powershell-pro-tools
https://www.youtube.com/results?search_query=powershell-pro-tools
https://www.sapien.com/software/powershell_studio
https://www.youtube.com/results?search_query=Sapien%27s+powershell+studio++winforms
https://visualstudio.microsoft.com/vs
https://www.youtube.com/results?search_query=vs+2019+community+winforms