Powershell 如何使图形用户界面的形式和工具考虑屏幕像素?
我想做的形式和所有的工具都可以自动依赖屏幕像素。我试过这个,它只能在某些分辨率下工作,当我以高分辨率执行时,表单和所有工具都非常小。 有人能给我一个主意吗? 我也尝试Windows状态=最大化,但是否有可能使工具仍然可以考虑屏幕像素?Powershell 如何使图形用户界面的形式和工具考虑屏幕像素?,powershell,Powershell,我想做的形式和所有的工具都可以自动依赖屏幕像素。我试过这个,它只能在某些分辨率下工作,当我以高分辨率执行时,表单和所有工具都非常小。 有人能给我一个主意吗? 我也尝试Windows状态=最大化,但是否有可能使工具仍然可以考虑屏幕像素? Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.Application]::EnableV
Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
function ConvertTo-ScaledPixel
{
[OutputType([int])]
param
(
[Parameter(ParameterSetName = 'Height',
Mandatory = $true,
Position = 0)]
[Parameter(ParameterSetName = 'Width',
Mandatory = $true,
Position = 0)]
[ValidateNotNull()]
[System.Windows.Forms.Form]$Form,
[Parameter(ParameterSetName = 'Width',
Mandatory = $true,
Position = 1)]
[int]$Width,
[Parameter(ParameterSetName = 'Height',
Mandatory = $true,
Position = 1)]
[int]$Height
)
switch ($PsCmdlet.ParameterSetName)
{
'Height' {
if ($Form.AutoScaleMode -eq 'Font')
{
return ($Form.CurrentAutoScaleDimensions.Height / 13) * $Height;
}
elseif ($Form.AutoScaleMode -eq 'Dpi')
{
return ($Form.CurrentAutoScaleDimensions.Height / 96) * $Height;
}
else
{
return $Height
}
break
}
'Width' {
if ($Form.AutoScaleMode -eq 'Font')
{
return ($Form.CurrentAutoScaleDimensions.Width / 6) * $Width;
}
elseif ($Form.AutoScaleMode -eq 'Dpi')
{
return ($Form.CurrentAutoScaleDimensions.Width / 96) * $Width;
}
else
{
return $Width
}
break
}
}
}
$Form = New-Object System.Windows.Forms.Form
$form.AutoSize = $true
$Form.MaximizeBox = $false
$Form.text = ""
$Form.FormBorderStyle = 'FixedDialog'
$Form.StartPosition = "CenterScreen"
$Form.BackColor = "#ffffff"
$Height = ConvertTo-ScaledPixel -Form $form -Height $form.Height
$width = ConvertTo-ScaledPixel -Form $form -Height $form.Width
#$Form.WindowState = 'Maximized'
$Form.Size = New-Object System.Drawing.Size($width,$Height)
$Font = New-Object System.Drawing.Font("Segoe UI",13,[System.Drawing.FontStyle]::Regular,[System.Drawing.GraphicsUnit]::Pixel)
$Form.Font = $Font
$Form.SizeGripStyle = 'Hide'
$Label1 = New-Object system.Windows.Forms.Label
$Label1.text = "Please select:"
$Label1.Location = New-Object System.Drawing.Size(700,40)
$label1.AutoSize = $true
$Form.Controls.Add($Label1)
$Combo = New-Object system.Windows.Forms.ComboBox
$Combo.AutoSize = $true
$Combo.DropDownStyle = "DropDownList"
$Combo.Size = New-Object System.Drawing.Size(190,80)
$Combo.Location = New-Object System.Drawing.Size(690,70)
$Form.Controls.Add($Combo)
$Combo.Items.AddRange(@(Get-ChildItem -Directory ".\").Name)
$SelectedFile= {
# Write-Host $Combo.SelectedItem
$files = [collections.arraylist](Get-ChildItem $Combo.SelectedItem -File *.que)
$checkedListBox.DataSource = $files
$checkedListBox.DisplayMember = 'Name'
$ButtonDelete.Visible = $true
$ButtonDone.Visible = $true
}
$Combo.add_SelectedIndexChanged($SelectedFile)
$Combo.DisplayMember = 'Name'
$checkedListBox = New-Object System.Windows.Forms.CheckedListbox
$checkedListBox.CheckOnClick = $true
$checkedListBox.Enabled = $true
$checkedListBox.BackColor = "#ffffff"
$checkedListBox.Location = New-Object System.Drawing.Size(20,40)
$checkedListBox.Size = New-Object System.Drawing.Size(585,400)
$Form.Controls.Add($checkedListBox)
$ButtonDelete = New-Object System.Windows.Forms.Button
$ButtonDelete.Location = New-Object System.Drawing.Size(220,440)
$ButtonDelete.Size = New-Object System.Drawing.Size(80,30)
$ButtonDelete.Text = "Delete"
$ButtonDelete.BackColor = "#0095d9"
$ButtonDelete.ForeColor = "#ffffff"
$ButtonDelete.FlatStyle = 1
$ButtonDelete.Visible = $false
$ButtonDelete.Add_Click({
$UserResponse = [System.Windows.Forms.MessageBox]::Show("Are you sure to delete?","Message" , 4)
if ($UserResponse -eq "YES" )
{
$getfile = ($CheckedListBox.CheckedItems).Name
$getfile | Out-File .\DeleteFile.txt -Force
$Form.Close()
}
else
{
#No activity
}
})
$Form.Controls.Add($ButtonDelete)
$ButtonDone = New-Object System.Windows.Forms.Button
$ButtonDone.Location = New-Object System.Drawing.Size(320,440)
$ButtonDone.Size = New-Object System.Drawing.Size(80,30)
$ButtonDone.Text = "Done"
$ButtonDone.BackColor = "#0095d9"
$ButtonDone.ForeColor = "#ffffff"
$ButtonDone.FlatStyle = 1
$ButtonDone.Add_Click({$Form.Close()})
$ButtonDone.Visible = $false
$Form.Controls.Add($ButtonDone)
$ButtonRefresh = New-Object system.Windows.Forms.Button
$ButtonRefresh.BackColor = "#0095d9"
$ButtonRefresh.ForeColor = "#ffffff"
$ButtonRefresh.text = "Refresh"
$ButtonRefresh.Location = New-Object System.Drawing.Size(750,440)
$ButtonRefresh.Size = New-Object System.Drawing.Size(80,30)
$ButtonRefresh.Add_Click({
# Remove all items from the ComboBox
$Combo.Items.Clear()
# Repopulate the ComboBox, just like when it was created
$Combo.Items.AddRange(@(Get-ChildItem -Directory ".\").Name)
})
$ButtonRefresh.FlatStyle = 1
$Form.Controls.Add($ButtonRefresh)
$Groupbox1 = New-Object system.Windows.Forms.Groupbox
$Groupbox1.text = "Information:"
$Groupbox1.Size = New-Object System.Drawing.Size(620,480)
$Groupbox1.Location = New-Object System.Drawing.Size(5,5)
$Groupbox1.Padding = New-Object -TypeName System.Windows.Forms.Padding -ArgumentList (5,5,5,5)
$Form.Controls.Add($Groupbox1)
$Groupbox2 = New-Object system.Windows.Forms.Groupbox
$Groupbox2.text = "List:"
$Groupbox2.Size = New-Object System.Drawing.Size(260,480)
$Groupbox2.Location = New-Object System.Drawing.Size(650,5)
$Groupbox2.Padding = New-Object -TypeName System.Windows.Forms.Padding -ArgumentList (5,5,5,5)
$Form.Controls.Add($Groupbox2)
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()
查看此处的文档:正如您所说,您似乎使用了
$Form.WindowState='Maximized'
是的,我尝试了$Form.WindowState='Maximized
。但问题是,如何控制其他工具的大小?像$groupbox还是$button?如果定义这些大小和位置的大小,它将网格化,这意味着我不需要使用函数converttoscaledPixel
anyomore@马修