PowerShell 表单 - 垂直进度条
PowerShell Forms - Vertical Progress Bar
这是关于 PowerShell 中的 Windows 表单和 System.Windows.Forms.ProgressBar。
我找遍了,找不到任何可以让进度条垂直填充的东西。我考虑过替代方案(例如调整带有背景颜色的标签的大小),但如果可能的话,我更喜欢使用已经具有 class 的内容。我可以发誓我以前见过这样的东西,即使它不是真正的进度条。我不是用它来跟踪进度,而是更多地用于 CPU 使用情况、RAM 使用情况和驱动器 space 服务器状态。这是一个有用的 GUI,用于从下拉列表中快速报告服务器,我不必打开另一个完整的 shell 会话(我有足够的 shells 打开,因为它在 O365 之间eDiscovery、数据分析和其他需求)。感谢您提前提出任何建议。
这是一个很好的 C# 答案How do I make a winforms progress bar move vertically in C#?
它覆盖了 CreateParams 方法以在 Style 中设置 PBS_VERTICAL 标志。
不幸的是,要使其在 PowerShell 中运行,您将不得不使用一些 C# 代码。
这对我有用:
$type = @'
using System;
using System.Windows.Forms;
public class VerticalProgressBar : ProgressBar {
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.Style |= 0x04;
return cp;
}
}
}
'@
Add-Type -TypeDefinition $type -ReferencedAssemblies System.Drawing,System.Data,System.Windows.Forms
$userForm = New-Object System.Windows.Forms.Form
$userForm.Text = "$title"
$userForm.Size = New-Object System.Drawing.Size(230,300)
$userForm.StartPosition = "CenterScreen"
$userForm.AutoSize = $False
$userForm.MinimizeBox = $False
$userForm.MaximizeBox = $False
$userForm.SizeGripStyle= "Hide"
$userForm.WindowState = "Normal"
$userForm.FormBorderStyle="Fixed3D"
$progressbar = New-Object 'VerticalProgressBar'
$progressbar.Location = New-Object System.Drawing.Point(180, 50);
$progressbar.Width = 20
$progressbar.Height = 200
$userForm.Controls.Add($progressbar)
$TrackBar = New-Object 'System.Windows.Forms.TrackBar'
$TrackBar.Location = New-Object System.Drawing.Point(10, 10);
$TrackBar.Width = 200
$TrackBar.add_ValueChanged({$progressbar.Value = $this.value*10})
$userForm.Controls.Add($TrackBar)
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(10,220)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({$userForm.Close()})
$userForm.Controls.Add($OKButton)
$userForm.ShowIcon = $False
$userForm.Add_Shown({$userForm.Activate()})
$userForm.AcceptButton = $OKButton
[void] $userForm.ShowDialog()
这是关于 PowerShell 中的 Windows 表单和 System.Windows.Forms.ProgressBar。
我找遍了,找不到任何可以让进度条垂直填充的东西。我考虑过替代方案(例如调整带有背景颜色的标签的大小),但如果可能的话,我更喜欢使用已经具有 class 的内容。我可以发誓我以前见过这样的东西,即使它不是真正的进度条。我不是用它来跟踪进度,而是更多地用于 CPU 使用情况、RAM 使用情况和驱动器 space 服务器状态。这是一个有用的 GUI,用于从下拉列表中快速报告服务器,我不必打开另一个完整的 shell 会话(我有足够的 shells 打开,因为它在 O365 之间eDiscovery、数据分析和其他需求)。感谢您提前提出任何建议。
这是一个很好的 C# 答案How do I make a winforms progress bar move vertically in C#?
它覆盖了 CreateParams 方法以在 Style 中设置 PBS_VERTICAL 标志。 不幸的是,要使其在 PowerShell 中运行,您将不得不使用一些 C# 代码。
这对我有用:
$type = @'
using System;
using System.Windows.Forms;
public class VerticalProgressBar : ProgressBar {
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.Style |= 0x04;
return cp;
}
}
}
'@
Add-Type -TypeDefinition $type -ReferencedAssemblies System.Drawing,System.Data,System.Windows.Forms
$userForm = New-Object System.Windows.Forms.Form
$userForm.Text = "$title"
$userForm.Size = New-Object System.Drawing.Size(230,300)
$userForm.StartPosition = "CenterScreen"
$userForm.AutoSize = $False
$userForm.MinimizeBox = $False
$userForm.MaximizeBox = $False
$userForm.SizeGripStyle= "Hide"
$userForm.WindowState = "Normal"
$userForm.FormBorderStyle="Fixed3D"
$progressbar = New-Object 'VerticalProgressBar'
$progressbar.Location = New-Object System.Drawing.Point(180, 50);
$progressbar.Width = 20
$progressbar.Height = 200
$userForm.Controls.Add($progressbar)
$TrackBar = New-Object 'System.Windows.Forms.TrackBar'
$TrackBar.Location = New-Object System.Drawing.Point(10, 10);
$TrackBar.Width = 200
$TrackBar.add_ValueChanged({$progressbar.Value = $this.value*10})
$userForm.Controls.Add($TrackBar)
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(10,220)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click({$userForm.Close()})
$userForm.Controls.Add($OKButton)
$userForm.ShowIcon = $False
$userForm.Add_Shown({$userForm.Activate()})
$userForm.AcceptButton = $OKButton
[void] $userForm.ShowDialog()