![](/img/trans.png)
[英]ProgressBar shows on ISE but not on Console. Powershell responsive GUI on Runspace
[英]How to add label from a different runspace in a Powershell GUI?
在我的Powershell GUI中,我有兩種模式:連接和斷開連接。 每個都有一個步驟列表。 該列表是從xml中讀取的,然后作為每個步驟的標簽加載到flowlayout面板中。 因此,如果我有8個連接步驟,則將在flowlayout面板中創建8個標簽。
我希望在更改模式時動態更改標簽。 如果我處於連接模式並傳遞到斷開連接模式,則需要從功能運行區在flowlayout面板中加載相關步驟。
在我的腳本中,我有三個運行空間(一個用於GUI,一個用於功能,一個用於計時器)。
在Gui運行空間中,PanelLabelInner(flowlayoutpanel)被包裝到PanelLabelOuter中。 這是用於垂直居中。 我需要將標簽添加到PanelLabelInner中。
我需要完成BUiltXML函數。 首先,在模式更改時刪除所有標簽,然后更新ui以顯示新標簽:我該怎么做?
有了這段代碼,什么也沒添加,我想我必須使用諸如update,refresh之類的東西。
gui運行空間:
$CommonHashTable.PanelLabelOuter=New-Object System.Windows.Forms.Panel
$CommonHashTable.PanelLabelOuter.BackColor = [string]$PanelLabelOuterCfg.BackColor
$CommonHashTable.PanelLabelOuter.Name ="PanelLabelOuter"
$CommonHashTable.PanelLabelOuter.BorderStyle =[string]$PanelLabelOuterCfg.BorderStyle
$CommonHashTable.PanelLabelOuter.Dock = "Fill"
$CommonHashTable.PanelLabelOuter.AutoSize = $false
$CommonHashTable.MiddleLayout.Controls.Add($CommonHashTable.PanelLabelOuter,2,0)
$CommonHashTable.PanelLabelInner=New-Object System.Windows.Forms.FlowLayoutPanel
$CommonHashTable.PanelLabelInner.AutoSize = $false
$CommonHashTable.PanelLabelInner.Height = $CommonHashTable.c*20
$CommonHashTable.PanelLabelInner.Left = [Int32]$PanelLabelInnerCfg.Left
$CommonHashTable.PanelLabelInner.Width= $CommonHashTable.PanelLabelOuter.Width
$top=[int32](($CommonHashTable.PanelLabelOuter.Size.Height - $CommonHashTable.PanelLabelInner.Size.Height) / 2)
$CommonHashTable.PanelLabelInner.Top=$top
$CommonHashTable.PanelLabelInner.Padding= 0
$CommonHashTable.PanelLabelInner.Anchor = 'None'
$CommonHashTable.PanelLabelInner.FlowDirection = "TopDown"
$CommonHashTable.PanelLabelInner.WrapContents = $false
$CommonHashTable.PanelLabelInner.BackColor = [string]$PanelLabelInnerCfg.BackColor
$CommonHashTable.PanelLabelInner.Name ="PanelLabelInner"
$CommonHashTable.PanelLabelOuter.Controls.Add($CommonHashTable.PanelLabelInner)
函數運行空間
function BuiltXML{
Switch ($CommonHashTable.Phase) {
{$CommonHashTable.Phase -eq "Connect"}
{
$ConnectLabelText = "Connection"
$CommonHashTable.sourceXML = [xml](Get-Content $ProductPath\Xml\ConnectionLabels.xml)
}
{$CommonHashTable.Phase -eq "Disconnect"}
{
$ConnectLabelText = "Logout"
$CommonHashTable.sourceXML = [xml](Get-Content $ProductPath\Xml\DeconnectionLabels.xml)
}
}
$CommonHashTable.steps= $CommonHashTable.sourceXML.Dialer.Steps.Stp
$CommonHashTable.c = $CommonHashTable.steps.count
$CommonHashTable.PanelLabelInner.Invoke([Action[string]] {
$i =1
#$CommonHashTable.PanelLabelInner.Controls.Remove($CommonHashTable.Lbl)
$CommonHashTable.Lbl.Controls.Clear()
foreach ($e in $CommonHashTable.steps)
{
$CommonHashTable.Lbl = New-Object System.Windows.Forms.Label
$CommonHashTable.Lbl.Size=New-Object System.Drawing.Size($CommonHashTable.PanelLabelInner.Size.Width,20)
$CommonHashTable.Lbl.AutoSize = $false
$CommonHashTable.Lbl.Name = "Label"+$i
$CommonHashTable.Lbl.TextAlign = "MiddleLeft"
$CommonHashTable.Lbl.Text = $e.Label
$CommonHashTable.PanelLabelInner.Controls.Add($CommonHashTable.Lbl)
$i++
}
},
'normal')
}
我找到了一個解決方案...該功能還根據標簽的數量構建了流程圖面板。 因此,我有一個具有良好高度的布局面板。 我只需要在需要切換時清除外面板,添加這些標簽,然后進行更新。
function BuiltXML{
Switch ($CommonHashTable.Phase) {
{$CommonHashTable.Phase -eq "Connect"}
{
$CommonHashTable.ConnectLabel.Text = "Connexion"
$sourceXML = [xml](Get-Content $ProductPath\Xml\ConnectionLabels.xml)
}
{$CommonHashTable.Phase -eq "Disconnect"}
{
$CommonHashTable.ConnectLabel.Text = "Deconnexion"
$sourceXML = [xml](Get-Content $ProductPath\Xml\DeconnectionLabels.xml)
}
}
$etapes = $sourceXML.Dialer.Etapes.Etape
$c = $etapes.count
$CommonHashTable.PanelLabelOuter.Invoke(
[Action] {
$CommonHashTable.PanelLabelOuter.Controls.Clear()
$CommonHashTable.PanelLabelInner=New-Object System.Windows.Forms.FlowLayoutPanel
$CommonHashTable.PanelLabelInner.AutoSize = $false
$CommonHashTable.PanelLabelInner.Height = $c*20
$CommonHashTable.PanelLabelInner.Left = [Int32]$PanelLabelInnerCfg.Left
$CommonHashTable.PanelLabelInner.Width= $CommonHashTable.PanelLabelOuter.Width
$top=[int32](($CommonHashTable.PanelLabelOuter.Size.Height - $CommonHashTable.PanelLabelInner.Size.Height) / 2)
$CommonHashTable.PanelLabelInner.Top=$top
$CommonHashTable.PanelLabelInner.Padding= 0
$CommonHashTable.PanelLabelInner.Anchor = 'None'
$CommonHashTable.PanelLabelInner.FlowDirection = "TopDown"
$CommonHashTable.PanelLabelInner.WrapContents = $false
$CommonHashTable.PanelLabelInner.BackColor = [string]$PanelLabelInnerCfg.BackColor
$CommonHashTable.PanelLabelInner.Name ="PanelLabelInner"
$CommonHashTable.PanelLabelOuter.Controls.Add($CommonHashTable.PanelLabelInner)
$i =1
foreach ($e in $etapes)
{
$CommonHashTable.Lbl = New-Object System.Windows.Forms.Label
$CommonHashTable.Lbl.Size=New-Object System.Drawing.Size($CommonHashTable.PanelLabelInner.Size.Width,20)
$CommonHashTable.Lbl.AutoSize = $false
$CommonHashTable.Lbl.Name = "Label"+$i
$CommonHashTable.Lbl.TextAlign = "MiddleLeft"
#$CommonHashTable.Lbl.Font = New-Object System.Drawing.Font([string]$lblCfg.Font,[int32]$lblCfg.Size,[System.Drawing.FontStyle]::[string]$lblCfg.Style)
#$CommonHashTable.Lbl.ForeColor = [string]$lblCfg.Color
$CommonHashTable.Lbl.Text = $e.Label
$CommonHashTable.PanelLabelInner.Controls.Add($CommonHashTable.Lbl)
$i++
}
$CommonHashTable.PanelLabelInner.update()
}
)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.