这是关于PowerShell中的Windows窗体和System.Windows.Forms.ProgressBar。
我正在寻找所有可以让进度条垂直填充的内容。我已经考虑了替代方案(例如调整背景颜色的标签),但我更喜欢使用已经有类的东西。我本来可以发誓我之前已经看到过这样的东西,即使它不是真正的进度条。我不是用它来跟踪进度,而是用于CPU使用率,RAM使用率和服务器状态的驱动器空间。这是一个有用的GUI,用于从下拉列表中快速报告服务器,我无需打开另一个完整的shell会话(我有足够的shell打开,因为它在O365电子发现,数据分析和其他需求之间) 。感谢您提前提出任何建议。
答案 0 :(得分:2)
这是一个非常好的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()