如何使用 Powershell 将 ComboBox 选定文件附加到 TextBox?

Posted

技术标签:

【中文标题】如何使用 Powershell 将 ComboBox 选定文件附加到 TextBox?【英文标题】:How to append ComboBox Selected File to TextBox using Powershell? 【发布时间】:2020-07-03 15:54:09 【问题描述】:

我有一个带有组合框和文本框的 GUI。我需要将文本框的输出更新为组合框选定的文件。

我试过这个。但是文本框中的输出不正确。 任何人都可以帮忙。谢谢

$Disk = New-Object system.Windows.Forms.ComboBox
$Disk.AutoSize = $true
$Disk.DropDownStyle = "DropDownList"

$Disk.Items.AddRange((get-partition|?$_.DriveLetter|select DiskNumber ))
$SelectedFile= 
    $DiskSelected = $Disk.SelectedItem
    Write-Host "Disk Selected: $DiskSelected"

    $DiskNum = $DiskSelected -split "@DiskNumber="
    $DiskNumber = $DiskNum -split ""
    Write-Host "Disk Number: $DiskNumber"

    $TextBox1.AppendText((Get-Disk -Number $DiskNumber))


$Disk.add_SelectedIndexChanged($SelectedFile)
$Disk.DisplayMember = 'Name'

$TextBox1 = New-Object system.Windows.Forms.TextBox
$TextBox1.multiline = $true
$TextBox1.BackColor = "#F5F5F5"

文本框中的输出是这样的

MSFT_Disk (ObjectId = "1\\SSXX\root/Microsoft/Windows/Stor...) MSFT_Disk (ObjectId = "1\\SSXX\root/Microsoft/Windows/Stor...)

更新

现在,我可以将磁盘信息带到文本框,但如果我在组合框中选择另一个项目,文本框不会更新。

$Disk = New-Object system.Windows.Forms.ComboBox
$Disk.AutoSize = $true
$Disk.DropDownStyle = "DropDownList"

$Disk.Items.AddRange((get-partition|?$_.DriveLetter| select DiskNumber )) 
$SelectedFile = 
    $DiskSelected = $Disk.SelectedItem
    Write-Host "Disk Selected: $DiskSelected"

    $DiskNum = $DiskSelected -split "@DiskNumber="
    $DiskNumber = $DiskNum -split ""
    Write-Host "Disk Number:$DiskNumber"
    Get-Disk | Where-Object -FilterScript $_.Number -Eq "$DiskNumber" | Select FriendlyName, BusType, Size | Export-Csv 'Temp.csv' -NoType
    $TextBox1.AppendText((Get-Content -Path ".\Temp.csv"))


$Disk.add_SelectedIndexChanged($SelectedFile)
$Disk.DisplayMember = 'Name'

$TextBox1 = New-Object system.Windows.Forms.TextBox
$TextBox1.multiline = $true
$TextBox1.WordWrap = $true
$TextBox1.BackColor = "#F5F5F5"
$textsize = ($width / 130)
$FontText = New-Object System.Drawing.Font("Calibri",$textsize,[System.Drawing.FontStyle]::Regular,[System.Drawing.GraphicsUnit]::Pixel)
$TextBox1.Font = $FontText

【问题讨论】:

【参考方案1】:

试试这个。

using namespace System.Windows.Forms
Add-Type -AssemblyName System.Windows.Forms

$partitions = Get-Partition | where DriveLetter

########## Controls ##########

$comboBox1 =[ComboBox]@
    Location = "10,10"
    AutoSize = $true
    DropDownStyle = "DropDownList"
    DisplayMember = "DriveLetter"

$comboBox1.Items.AddRange($partitions)

$textBox1 = [TextBox]@
    Location = "10,50"
    Size = "900,300"
    Anchor = "Left,Right,Top,Bottom"
    Multiline = $true
    WordWrap = $false
    ScrollBars = "Both"
    BackColor = "#F5F5F5"
    Font = "Consolas,10"


$form = [form]@ Size = "940,400" 
$form.Controls.AddRange(@($comboBox1, $textBox1))


########## EventHandlers ##########

$comboBox1.add_SelectedIndexChanged
    $selectedPartition = $comboBox1.SelectedItem
    $TextBox1.Text = @(
        $selectedPartition.DriveLetter + ":"
        Get-Disk -Partition $selectedPartition | Format-List | Out-String
    )


# Show form
[void]$form.ShowDialog()

请注意,您选择的项目是一个对象,而不是一个字符串。


更新

尝试重写以下部分。 您可以通过$TextBox1.Text = ... 而不是$TextBox1.AppendText() 更新所有文本。

$Disk.Items.AddRange((get-partition|?$_.DriveLetter| select -ExpandProperty DiskNumber)) 
$SelectedFile = 
    $DiskNumber = $Disk.SelectedItem
    Write-Host "Disk Number:$DiskNumber"
    $TextBox1.Text = Get-Disk $DiskNumber | Select FriendlyName, BusType, Size | Out-String

【讨论】:

嗨@rokumaru 谢谢你的帮助。我更新我的代码。现在我可以将磁盘信息带到文本框中。但问题是,如果我在组合框中选择另一个项目,我将无法更新文本框。请有任何想法。谢谢 嗨@rokumaru ..我尝试了你代码的事件处理程序,问题是,如果我选择另一个磁盘编号,磁盘编号0总是存在。你知道问题所在吗? 添加回答。 是的,我尝试使用 $TextBox1.Text = ... 但磁盘号 0 始终存在 我明白了.. 谢谢

以上是关于如何使用 Powershell 将 ComboBox 选定文件附加到 TextBox?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PowerShell 可靠地将项目复制到 mtp 设备?

如何使用powershell将文本($)替换为文本文件中的引号

如何使用PowerShell将文件附加到电子邮件

如何使用powershell将监视器超时设置为“从不”

如何使用脚本块和参数将 powershell.exe 与 -Command 一起使用

如何使用 Terraform local-exec 将命名参数传递给 powershell 脚本?