簡體   English   中英

如何使用 PowerShell 在 GUI 表單中處理 label 大小和位置?

[英]How to handle label size and location in the GUI form using PowerShell?

我創建了一個簡單的 GUI。 我想在任何分辨率屏幕上執行 GUI。 在我的工作屏幕中,它顯示圖片1。一旦我在其他屏幕上執行它,尺寸label,position 不同,如圖2所示。任何人都可以幫助我請如何處理? 太感謝了。

圖片1 在此處輸入圖像描述

圖二在此處輸入圖像描述

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

$Form                            = New-Object system.Windows.Forms.Form
$Form.ClientSize                 = '400,400'
$Form.text                       = "Form"
$Form.TopMost                    = $false
$form.AutoScale                  = $true
$form.AutoScaleMode              = "Font"
$Form.FormBorderStyle            = "FixedDialog"

$Groupbox1                       = New-Object system.Windows.Forms.Groupbox
$Groupbox1.height                = 362
$Groupbox1.width                 = 367
$Groupbox1.text                  = "Group Box"
$Groupbox1.location              = New-Object System.Drawing.Point(15,21)

$Label1                          = New-Object system.Windows.Forms.Label
$Label1.text                     = "Do you need handling the job?"
$Label1.AutoSize                 = $true
$Label1.width                    = 25
$Label1.height                   = 10
$Label1.location                 = New-Object System.Drawing.Point(92,82)
$Label1.Font                     = 'Microsoft Sans Serif,10'

$Button1                         = New-Object system.Windows.Forms.Button
$Button1.text                    = "Yes"
$Button1.width                   = 60
$Button1.height                  = 30
$Button1.location                = New-Object System.Drawing.Point(34,263)
$Button1.Font                    = 'Microsoft Sans Serif,10'

$Button2                         = New-Object system.Windows.Forms.Button
$Button2.text                    = "No"
$Button2.width                   = 60
$Button2.height                  = 30
$Button2.location                = New-Object System.Drawing.Point(268,263)
$Button2.Font                    = 'Microsoft Sans Serif,10'

$Form.controls.AddRange(@($Groupbox1))
$Groupbox1.controls.AddRange(@($Label1,$Button1,$Button2))


[void]$Form.ShowDialog()

更新

我試試這個

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$Form = New-Object system.Windows.Forms.Form
$Form.FormBorderStyle = "FixedDialog"
$Width = [System.Windows.Forms.Screen]::AllScreens.bounds.width
$Heigt = [System.Windows.Forms.Screen]::AllScreens.bounds.height

$Widht_Form = $Width[0] / 3.5
Write-Host "$Widht_Form"
$Heigt_Form = $Heigt[0] / 1.8
Write-Host "$Heigt_Form"
$Form.Width = $Widht_Form
$Form.Height = $Heigt_Form

$label1 = New-Object 'System.Windows.Forms.Label'
$Yes = New-Object 'System.Windows.Forms.Button'
$No = New-Object 'System.Windows.Forms.Button'
$Title = New-Object 'System.Windows.Forms.Label'
$timer1 = New-Object 'System.Windows.Forms.Timer'
$InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState'

$Form_Load = {  
    $TotalTime = 10 #in seconds
        $script:StartTime = (Get-Date).AddSeconds($TotalTime)
        #Start the timer
        $timer1.Start()
}   
$Cancel_Click={ 
}
$timer1_Tick={
        #Use Get-Date for Time Accuracy
        [TimeSpan]$span = $script:StartTime - (Get-Date)
        #Update the display
        $Form.Text = $label1.Text = "{0:N0}" -f $span.TotalSeconds
        if ($span.TotalSeconds -le 0) {
            $timer1.Stop()
            $Form.Close()
        }
    }

$Form_StateCorrection_Load=
{
    $Form.WindowState = $InitialFormWindowState
}

$Form_Cleanup_FormClosed=
{
    try
    {
        # $Cancel.remove_Click($Cancel_Click)
        $Form.remove_Load($Form_Load)
        $timer1.remove_Tick($timer1_Tick)
        $Form.remove_Load($Form_StateCorrection_Load)
        $Form.remove_FormClosed($Form_Cleanup_FormClosed)
    }
    catch [Exception]
    { }
}

$Form.SuspendLayout()
$Form.Controls.Add($label1)
$Form.Controls.Add($Yes)
$Form.Controls.Add($No)
$Form.Controls.Add($Title)

$Form.StartPosition = "CenterScreen"
$Form.BackColor = "#f6f6f6"
$Form.add_Load($Form_Load)

$label1.Font = 'Microsoft Sans Serif,20,style=Bold'
$Label1.ForeColor = "#176faa"
$label1.AutoSize = $true
$label1.width = 25
$label1.height = 10
$label1_height = $Heigt_Form / 2.5
$label1_width = $Widht_Form / 2.2
$label1.location = New-Object System.Drawing.Point($label1_width,$label1_height)

$Title.Text = "Do you need handling the job?"
$Title.ForeColor = "#176faa"
$Title.Font = 'Microsoft Sans Serif,16,style=Bold'
$Title.AutoSize = $true
$Title.width = 25
$Title.height = 10
$Title_height = $Heigt_Form / 5
$Title_width = $Widht_Form / 5
$Title.location = New-Object System.Drawing.Point($Title_width,$Title_height)

$Yes.AutoSize = $true
$Yes_height = $Heigt_Form * 0.7
$Yes_width = $Widht_Form / 8
$Yes.Location = New-Object System.Drawing.Size($Yes_width,$Yes_height)
$Yes.Size = New-Object System.Drawing.Size(90,35)
$Yes.Text = "Yes"
$Yes.Add_Click(
    {
    Write-Host "Call GUI Control"
    Start-Sleep -s 1
    $Form.Close()
    }
)

$No.AutoSize = $true
$No_height = $Heigt_Form * 0.7
$No_width = ($Yes_width * 6) - 35
$No.Location = New-Object System.Drawing.Size($No_width,$No_height)
$No.Size = New-Object System.Drawing.Size(90,35)
# $No.BackColor = "#9fd5f3"
$No.Text = "No"
$No.Add_Click(
    {
    Write-Host "Continue the process"
    $Form.Close()
    }
)

$timer1.add_Tick($timer1_Tick)
$Form.ResumeLayout()

#Save the initial state of the form
$InitialFormWindowState = $Form.WindowState
#Init the OnLoad event to correct the initial state of the form
$Form.add_Load($Form_StateCorrection_Load)
#Clean up the control events
$Form.add_FormClosed($Form_Cleanup_FormClosed)
#Show the Form
return $Form.ShowDialog()

這種方式也可以將 label 和按鈕網格化,然后在不同的屏幕上執行一次

您可以使用 WMI Object 以這種形式調整您的對象。 WMI 對象返回有關系統的鍵值信息。

這是您可以創建其對象取決於屏幕大小的 GUI 的方法:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

$sw = (Get-WmiObject -Class Win32_DesktopMonitor).ScreenWidth[1]
$sh = (Get-WmiObject -Class Win32_DesktopMonitor).ScreenHeight[1]

$Form                            = New-Object system.Windows.Forms.Form
$Form.ClientSize                 = "$($sw / 2),$($sh / 2)"
$Form.text                       = "Form"
$Form.TopMost                    = $false
$form.AutoScale                  = $true
$form.AutoScaleMode              = "Font"
$Form.FormBorderStyle            = "FixedDialog"

$Groupbox1                       = New-Object system.Windows.Forms.Groupbox
$Groupbox1.height                = $($sw / 2)
$Groupbox1.width                 = $($sh / 2)
$Groupbox1.text                  = "Group Box"
$Groupbox1.location              = New-Object System.Drawing.Point(15,21)

$Label1                          = New-Object system.Windows.Forms.Label
$Label1.text                     = "Do you need handling the job?"
$Label1.AutoSize                 = $true
$Label1.width                    = 25
$Label1.height                   = 10
$Label1.location                 = New-Object System.Drawing.Point($($sw / 16),$($sh / 12))
$Label1.Font                     = 'Microsoft Sans Serif,10'

$Button1                         = New-Object system.Windows.Forms.Button
$Button1.text                    = "Yes"
$Button1.width                   = 60
$Button1.height                  = 30
$Button1.location                = New-Object System.Drawing.Point($($sw / 20),$($sh / 3))
$Button1.Font                    = 'Microsoft Sans Serif,10'

$Button2                         = New-Object system.Windows.Forms.Button
$Button2.text                    = "No"
$Button2.width                   = 60
$Button2.height                  = 30
$Button2.location                = New-Object System.Drawing.Point($($sw / 6),$($sh / 3))
$Button2.Font                    = 'Microsoft Sans Serif,10'

$Form.controls.AddRange(@($Groupbox1))
$Groupbox1.controls.AddRange(@($Label1,$Button1,$Button2))


[void]$Form.ShowDialog()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM