How to create multiple button with PowerShell?

我们两清 提交于 2021-01-29 10:38:18

问题


I would like to create multiple buttons. The button more than 50 buttons. But I do not want to create it one by one like what I did below. All the button function, size, are the same. Only the name is different. Anyone can help me please, and give an idea. Thank you very much.

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(973,1177)
$Form.text                       = "Form"
$Form.TopMost                    = $false
$Form.BackColor                  = [System.Drawing.ColorTranslator]::FromHtml("#07326c")

$Groupbox3                       = New-Object system.Windows.Forms.Groupbox
$Groupbox3.height                = 269
$Groupbox3.width                 = 430
$Groupbox3.location              = New-Object System.Drawing.Point(262,825)

$Button9                         = New-Object system.Windows.Forms.Button
$Button9.text                    = "1B"
$Button9.width                   = 39
$Button9.height                  = 29
$Button9.location                = New-Object System.Drawing.Point(30,51)
$Button9.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button9.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button3                         = New-Object system.Windows.Forms.Button
$Button3.text                    = "Reserve"
$Button3.width                   = 87
$Button3.height                  = 30
$Button3.location                = New-Object System.Drawing.Point(134,215)
$Button3.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button3.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$TextBox1                        = New-Object system.Windows.Forms.TextBox
$TextBox1.multiline              = $false
$TextBox1.width                  = 256
$TextBox1.height                 = 20
$TextBox1.location               = New-Object System.Drawing.Point(135,46)
$TextBox1.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

$TextBox2                        = New-Object system.Windows.Forms.TextBox
$TextBox2.multiline              = $false
$TextBox2.width                  = 258
$TextBox2.height                 = 20
$TextBox2.location               = New-Object System.Drawing.Point(134,96)
$TextBox2.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

$Label1                          = New-Object system.Windows.Forms.Label
$Label1.text                     = "Name"
$Label1.AutoSize                 = $true
$Label1.width                    = 25
$Label1.height                   = 10
$Label1.location                 = New-Object System.Drawing.Point(21,48)
$Label1.Font                     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Label1.ForeColor                = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Label2                          = New-Object system.Windows.Forms.Label
$Label2.text                     = "Line ID/Phone"
$Label2.AutoSize                 = $true
$Label2.width                    = 25
$Label2.height                   = 10
$Label2.location                 = New-Object System.Drawing.Point(18,147)
$Label2.Font                     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Label2.ForeColor                = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Label3                          = New-Object system.Windows.Forms.Label
$Label3.text                     = "Temperature"
$Label3.AutoSize                 = $true
$Label3.width                    = 25
$Label3.height                   = 10
$Label3.location                 = New-Object System.Drawing.Point(18,96)
$Label3.Font                     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Label3.ForeColor                = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$TextBox3                        = New-Object system.Windows.Forms.TextBox
$TextBox3.multiline              = $false
$TextBox3.width                  = 260
$TextBox3.height                 = 20
$TextBox3.location               = New-Object System.Drawing.Point(134,146)
$TextBox3.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

$Button4                         = New-Object system.Windows.Forms.Button
$Button4.text                    = "Export"
$Button4.width                   = 85
$Button4.height                  = 30
$Button4.location                = New-Object System.Drawing.Point(309,215)
$Button4.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button4.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Label4                          = New-Object system.Windows.Forms.Label
$Label4.AutoSize                 = $true
$Label4.width                    = 25
$Label4.height                   = 10
$Label4.location                 = New-Object System.Drawing.Point(91,57)
$Label4.Font                     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

$Groupbox2                       = New-Object system.Windows.Forms.Groupbox
$Groupbox2.height                = 461
$Groupbox2.width                 = 350
$Groupbox2.location              = New-Object System.Drawing.Point(556,132)
$Groupbox2.BackColor             = [System.Drawing.ColorTranslator]::FromHtml("#dff9f2")

$Button10                        = New-Object system.Windows.Forms.Button
$Button10.text                   = "2B"
$Button10.width                  = 39
$Button10.height                 = 29
$Button10.location               = New-Object System.Drawing.Point(94,51)
$Button10.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button10.BackColor              = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button11                        = New-Object system.Windows.Forms.Button
$Button11.text                   = "3B"
$Button11.width                  = 39
$Button11.height                 = 29
$Button11.location               = New-Object System.Drawing.Point(158,51)
$Button11.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button11.BackColor              = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button12                        = New-Object system.Windows.Forms.Button
$Button12.text                   = "4B"
$Button12.width                  = 39
$Button12.height                 = 29
$Button12.location               = New-Object System.Drawing.Point(223,52)
$Button12.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button12.BackColor              = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button13                        = New-Object system.Windows.Forms.Button
$Button13.text                   = "5B"
$Button13.width                  = 39
$Button13.height                 = 29
$Button13.location               = New-Object System.Drawing.Point(287,52)
$Button13.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button13.BackColor              = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Label5                          = New-Object system.Windows.Forms.Label
$Label5.text                     = "RIGHT SIDE"
$Label5.AutoSize                 = $true
$Label5.width                    = 25
$Label5.height                   = 10
$Label5.location                 = New-Object System.Drawing.Point(558,109)
$Label5.Font                     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Label5.ForeColor                = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Label6                          = New-Object system.Windows.Forms.Label
$Label6.text                     = "LEFT SIDE"
$Label6.AutoSize                 = $true
$Label6.width                    = 25
$Label6.height                   = 10
$Label6.location                 = New-Object System.Drawing.Point(58,106)
$Label6.Font                     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Label6.ForeColor                = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button1                         = New-Object system.Windows.Forms.Button
$Button1.text                    = "1A"
$Button1.width                   = 40
$Button1.height                  = 28
$Button1.location                = New-Object System.Drawing.Point(88,181)
$Button1.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button1.ForeColor               = [System.Drawing.ColorTranslator]::FromHtml("#000000")
$Button1.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button7                         = New-Object system.Windows.Forms.Button
$Button7.text                    = "5A"
$Button7.width                   = 39
$Button7.height                  = 29
$Button7.location                = New-Object System.Drawing.Point(328,183)
$Button7.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button7.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button8                         = New-Object system.Windows.Forms.Button
$Button8.text                    = "6A"
$Button8.width                   = 39
$Button8.height                  = 29
$Button8.location                = New-Object System.Drawing.Point(392,183)
$Button8.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button8.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button2                         = New-Object system.Windows.Forms.Button
$Button2.text                    = "2A"
$Button2.width                   = 39
$Button2.height                  = 29
$Button2.location                = New-Object System.Drawing.Point(144,181)
$Button2.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button2.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button5                         = New-Object system.Windows.Forms.Button
$Button5.text                    = "3A"
$Button5.width                   = 39
$Button5.height                  = 29
$Button5.location                = New-Object System.Drawing.Point(203,181)
$Button5.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button5.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Button6                         = New-Object system.Windows.Forms.Button
$Button6.text                    = "4A"
$Button6.width                   = 39
$Button6.height                  = 29
$Button6.location                = New-Object System.Drawing.Point(267,181)
$Button6.Font                    = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button6.BackColor               = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Groupbox1                       = New-Object system.Windows.Forms.Groupbox
$Groupbox1.height                = 459
$Groupbox1.width                 = 420
$Groupbox1.location              = New-Object System.Drawing.Point(52,133)
$Groupbox1.BackColor             = [System.Drawing.ColorTranslator]::FromHtml("#dff9f2")

$ToolTip1                        = New-Object system.Windows.Forms.ToolTip

$Groupbox4                       = New-Object system.Windows.Forms.Groupbox
$Groupbox4.height                = 106
$Groupbox4.width                 = 417
$Groupbox4.location              = New-Object System.Drawing.Point(51,649)

$Button14                        = New-Object system.Windows.Forms.Button
$Button14.text                   = "Reset"
$Button14.width                  = 87
$Button14.height                 = 30
$Button14.location               = New-Object System.Drawing.Point(292,39)
$Button14.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button14.BackColor              = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$ComboBox1                       = New-Object system.Windows.Forms.ComboBox
$ComboBox1.width                 = 169
$ComboBox1.height                = 68
$ComboBox1.location              = New-Object System.Drawing.Point(34,51)
$ComboBox1.Font                  = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

$Label7                          = New-Object system.Windows.Forms.Label
$Label7.text                     = "SEAT LIST"
$Label7.AutoSize                 = $true
$Label7.width                    = 25
$Label7.height                   = 10
$Label7.location                 = New-Object System.Drawing.Point(35,35)
$Label7.Font                     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Label7.ForeColor                = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Groupbox5                       = New-Object system.Windows.Forms.Groupbox
$Groupbox5.height                = 106
$Groupbox5.width                 = 353
$Groupbox5.location              = New-Object System.Drawing.Point(555,649)

$Label8                          = New-Object system.Windows.Forms.Label
$Label8.text                     = "SEAT LIST"
$Label8.AutoSize                 = $true
$Label8.width                    = 25
$Label8.height                   = 10
$Label8.location                 = New-Object System.Drawing.Point(24,35)
$Label8.Font                     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Label8.ForeColor                = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$ComboBox2                       = New-Object system.Windows.Forms.ComboBox
$ComboBox2.width                 = 169
$ComboBox2.height                = 68
$ComboBox2.location              = New-Object System.Drawing.Point(24,51)
$ComboBox2.Font                  = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

$Button15                        = New-Object system.Windows.Forms.Button
$Button15.text                   = "Reset"
$Button15.width                  = 87
$Button15.height                 = 30
$Button15.location               = New-Object System.Drawing.Point(241,39)
$Button15.Font                   = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$Button15.BackColor              = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")

$Panel1                          = New-Object system.Windows.Forms.Panel
$Panel1.height                   = 1143
$Panel1.width                    = 944
$Panel1.location                 = New-Object System.Drawing.Point(11,15)

$Form.controls.AddRange(@($Groupbox3,$Label4,$Groupbox2,$Label5,$Label6,$Button1,$Button7,$Button8,$Button2,$Button5,$Button6,$Groupbox1,$Groupbox4,$Groupbox5,$Panel1))
$Groupbox2.controls.AddRange(@($Button9,$Button10,$Button11,$Button12,$Button13))
$Groupbox3.controls.AddRange(@($Button3,$TextBox1,$TextBox2,$Label1,$Label2,$Label3,$TextBox3,$Button4))
$Groupbox4.controls.AddRange(@($Button14,$ComboBox1,$Label7))
$Groupbox5.controls.AddRange(@($Label8,$ComboBox2,$Button15))


[void]$Form.ShowDialog()

That's what I tried. Really appreciate it for anyone's help.


回答1:


Continuing from my comment with rough example(s) of dynamically adding checkboxes and buttons to a WinForm.

Add-Type -AssemblyName  System.Drawing,
                        PresentationCore,
                        PresentationFramework,
                        System.Windows.Forms,
                        Microsoft.VisualBasic
[System.Windows.Forms.Application]::EnableVisualStyles()

In this example, I am just using a number array to dynamically create a column of buttons.

$Form                            = New-Object system.Windows.Forms.Form
$Form.ClientSize                 = New-Object System.Drawing.Point(381,316)
$Form.text                       = "Auto Button UI"
$Form.TopMost                    = $false
$Form.BackColor                  = [System.Drawing.ColorTranslator]::FromHtml("#c9f6fe")

$i = 0

1..3 | 
ForEach-Object {"Button$PSitem"} | 
foreach{
    $CurrentButton          = $null

    $CurrentButton          = New-Object System.Windows.Forms.Button
    $CurrentButton.Location = "125,$(100+50*$i)"
    $CurrentButton.size     = '100,35'
    $CurrentButton.Text     = $PSItem
    $CurrentButton.Font     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
       
    $form.Controls.Add($CurrentButton)
    $i++
}

[void]$Form.ShowDialog()

This example adds two columns of same-named checkboxes and a row of buttons.

$Form               = New-Object system.Windows.Forms.Form
$Form.ClientSize    = New-Object System.Drawing.Point(381,316)
$Form.text          = "Copy/Paste - User Files/Config"
$Form.TopMost       = $True
$Form.BackColor     = [System.Drawing.ColorTranslator]::FromHtml("#c9f6fe")
$Form.StartPosition = 'CenterScreen'

$CheckboxName = @('desktop', 'downloads', 'pictures', 'videos', 'favorites' )

$i, $j, $k = 0, 0, 0

$CheckboxName | 
foreach{
    $CurrentCheckbox          = $null
    $CurrentCheckbox          = New-Object System.Windows.Forms.Checkbox
    $CurrentCheckbox.Location = "75,$(100+25*$i)"
    $CurrentCheckbox.Text     = $CheckboxName[$i]
    $CurrentCheckbox.Font     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

    switch ($PSItem)
    {
        'desktop'   {$desktop0   = $CurrentButton}
        'downloads' {$downloads0 = $CurrentButton}
        'pictures'  {$pictures0  = $CurrentButton}
        'videos'    {$videos0    = $CurrentButton}
        'favorites' {$favorites0 = $CurrentButton}
    }

    $i++
    $form.Controls.Add($CurrentCheckbox)
}

$CheckboxName | 
foreach{
    $CurrentCheckbox          = $null
    $CurrentCheckbox          = New-Object System.Windows.Forms.Checkbox
    $CurrentCheckbox.Location = "200,$(100+25*$j)"
    $CurrentCheckbox.Text     = $CheckboxName[$j]
    $CurrentCheckbox.Font     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

    switch ($PSItem)
    {
        'desktop'   {$desktop1   = $CurrentButton}
        'downloads' {$downloads1 = $CurrentButton}
        'pictures'  {$pictures1  = $CurrentButton}
        'videos'    {$videos1    = $CurrentButton}
        'favorites' {$favorites1 = $CurrentButton}
    }

    $j++
    $form.Controls.Add($CurrentCheckbox)
}


'Copy', 'Paste', 'Cancel' | 
foreach{
    $CurrentButton          = $null
    $CurrentButton          = New-Object System.Windows.Forms.Button
    $CurrentButton.Location = "$(50+100*$k), 275"
    $CurrentButton.Text     = $PSItem
    $CurrentButton.Font     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

    switch ($PSItem)
    {
        'Copy'   {$Copy   = $CurrentButton}
        'Paste'  {$Paste  = $CurrentButton}
        'Cancel' {$Cancel = $CurrentButton}
    }

    $k++
    $form.Controls.Add($CurrentButton)
}


[void]$Form.ShowDialog()

In this example, I am just using a number array to dynamically create a row of buttons and dynamically naming them using the passed in number using the New-Variable cmdlet.

$Form                            = New-Object system.Windows.Forms.Form
$Form.ClientSize                 = New-Object System.Drawing.Point(381,316)
$Form.text                       = "Auto Button UI"
$Form.TopMost                    = $false
$Form.BackColor                  = [System.Drawing.ColorTranslator]::FromHtml("#c9f6fe")

$i = 0
Get-Variable -Name 'Button*' | 
Remove-Variable

1..3 | 
foreach{
    $CurrentButton          = $null
    $CurrentButton          = New-Object System.Windows.Forms.Button
    $CurrentButton.Location = "$(50+100*$i), 275"
    $CurrentButton.Text     = $PSItem
    $CurrentButton.Font     = New-Object System.Drawing.Font('Microsoft Sans Serif',10)

    New-Variable "Button$PSitem" $CurrentButton

    $i++
    $form.Controls.Add($CurrentButton)
}

[void]$Form.ShowDialog()


来源:https://stackoverflow.com/questions/65697153/how-to-create-multiple-button-with-powershell

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!