首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell:在单击按钮时添加和刷新数据视图

Powershell:在单击按钮时添加和刷新数据视图
EN

Stack Overflow用户
提问于 2018-02-22 10:07:26
回答 1查看 7.1K关注 0票数 0

我正在尝试使用GUI创建一个工具,该工具由许多复选框、上下和组合框窗体控件组成,这些控件允许用户:

  • 为每个窗体控件选择一个值。
  • 单击按钮将所有选定的值“添加”到数组或对象中。
  • 将此对象添加到GUI底部的datagridview中
  • 允许在每次按下“添加”按钮时将多行添加到datagridview

我很难获得在datagridview中显示的值,更不用说在添加新值时触发刷新了。

下面是一些示例代码:

代码语言:javascript
复制
function add_Button {

    $obj = New-Object PSObject
    Add-Member -InputObject $obj -MemberType NoteProperty -Name DeployOK $chosenDeployOK
    Add-Member -InputObject $obj -MemberType NoteProperty -Name Name $chosenName
    Add-Member -InputObject $obj -MemberType NoteProperty -Name Cpu $upDown_CPU.Value
    Add-Member -InputObject $obj -MemberType NoteProperty -Name Ram $upDown_Memory.Value
    Add-Member -InputObject $obj -MemberType NoteProperty -Name AddDiskSize $upDown_SecondDisk.Value
    Add-Member -InputObject $obj -MemberType NoteProperty -Name OS $comboBox_OS.SelectedItem
    Add-Member -InputObject $obj -MemberType NoteProperty -Name VLANName $comboBox_VLAN.SelectedItem
    $global:Data += $obj

    Write-Host "Data is:"
    Write-Host $global:Data

    $dataGridView.DataSource = $null
    $dataGridView.DataSource = $global:Data
    $dataGridView.Refresh
}

$global:Data = New-Object System.Collections.ArrayList

$button_Add = new-object System.Windows.Forms.Button
$button_Add.Location = "490,10"
$button_Add.Size = "80,20"
$button_Add.Text = "Add"
$button_Add.Add_Click({add_Button})

# Base form creation
$Form = New-Object System.Windows.Forms.Form
$Form.width = 1000
$Form.height = 600
$Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D
$Form.Text = "VM Planner"
$Form.maximumsize = New-Object System.Drawing.Size(1000,600)
$Form.startposition = "centerscreen"
$Form.KeyPreview = $True
$Form.Add_KeyDown({if ($_.KeyCode -eq "Enter") {}})
$Form.Add_KeyDown({if ($_.KeyCode -eq "Escape")
{$Form.Close()}})


$dataGridView = New-Object System.Windows.Forms.DataGridView
$dataGridView.Size= "950,150"
$dataGridView.Location = "10,400"
$form.Controls.Add($dataGridView)

台词:

代码语言:javascript
复制
    Write-Host "Data is:"
    Write-Host $global:Data

只是为了调试目的,这样我就可以检查$Data在单击"Add“按钮时是否实际保存了我创建的对象。

控制台的输出示例:

代码语言:javascript
复制
Data is:
@{Name=; Cpu=1; Ram=1023; AddDiskSize=0; OS=Operating System; VLANName=VLAN-99}

在随后单击“添加”按钮时,在窗体控件中选择不同值的...and:

代码语言:javascript
复制
@{Name=; Cpu=4; Ram=3071; AddDiskSize=0; OS=Operating System; VLANName=VLAN55; ManualIntervention=ManualIntervention} @{Name=; Cpu=6; Ram=3071; AddDiskSize=0; OS=Operating System; VLANName=VLAN-10}

有什么想法吗?我刚开始使用Windows窗体创建Powershell GUI,但在过去使用Powershell编写了一些通用脚本。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-23 18:12:03

我必须完成并工作,所以尽管可能不是最简单、最简单或最有效的,但我决定按每一个按钮将对象的各个属性添加到datagridview中的适当列中,而我也必须事先定义这些属性。例如:

在“数据”定义中:

代码语言:javascript
复制
$dataGridView = New-Object System.Windows.Forms.DataGridView
$dataGridView.Size= "950,150"
$dataGridView.Location = "10,400"
$dataGridView.AllowUserToAddRows = $false
$dataGridView.ColumnCount = 4
$dataGridView.Columns[1].Name = "Name"
$dataGridView.Columns[2].Name = "CPU"
$dataGridView.Columns[3].Name = "RAM"
$dataGridView.Columns[4].Name = "AddDiskSize"

在按钮功能中:

代码语言:javascript
复制
$dataGridView.Rows.Add(,$obj.Name,$obj.CPU,$obj.Ram,$obj.AddDiskSize)

然后,每次按下按钮时,窗体控件中当前选定的值将按下每按钮一行。

也许不是最干净的,但我把这个答案留在这里,以防有人处于类似的情况下,需要让一些东西更早地发挥作用,而不是更晚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48924622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档