powershell - 如何使用 PowerShell 创建适合任何屏幕分辨率的 GUI?
问题描述
任何人都可以帮助我如何修复这个 GUI?我创建了一个 GUI,然后我需要 GUI 可以适应任何屏幕尺寸而无需任何尺寸变化。这个脚本,当我在其他不同分辨率的计算机上执行时,大小发生了变化。
请帮我。谢谢
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()
我已经尝试了一些功能,如自动调整大小,但它仍然是同样的问题。
解决方案
查看 Autoscale 而不是 Autosize。
$form.AutoScale = $true
我通常使用字体模式并选择其中一种系统字体
$form.AutoScaleMode = "Font"
您必须记住,除非您检测到当前分辨率并为您的表单使用该百分比的百分比,否则表观尺寸将根据您使用的显示器/分辨率而变化。
最简单的方法是控制像素大小和缩放。
推荐阅读
- javascript - location.reload(true) 启动无限循环
- javascript - 我有一个对象的 .log 文件,如何将它们转换为 JSON 对象以便在 Javascript 中进行迭代?
- youtube - 社交刀片如何生成实时订阅者计数
- spring-integration - Spring集成:通过自定义http标头转换为小写
- c# - 字节数组到位图使用什么像素格式
- python - 在 Ubuntu 上安装 Rasterio 失败并出现 ImportError
- sql - 当 MariaDB 看起来没有损坏时,如何解决可能已损坏的表错误
- android - 用 ViewPager 中片段 3 中的操作中的片段 2 替换片段 1
- angular - 在 Angular 6 项目中找不到使用波浪号从节点模块导入的文件
- ios - 使用超链接在 IOS 中实现可本地化的字符串