私のPowershell GUIには、接続と切断の2つのモードがあります。それぞれにステップのリストがあります。このリストはxmlから読み込まれ、各ステップのラベルとしてフローレイアウトパネルにロードされます。だから私は接続のための8つのステップがある場合、私はflowlayoutパネルで作成された8つのラベルを持っています。Powershell GUIの別のランスペースからラベルを追加するには?
モードが変更されたときにラベルを動的に変更したいと考えています。接続モードで接続解除モードに移行する場合、関数runspaceからflowlayoutパネルに関連するステップをロードする必要があります
私のスクリプトでは、3つのランスペースがあります(GUI用、関数用、 1つはタイマー用)。
Guiの実行空間では、PanelLabelInner(flowlayoutpanel)がPanelLabelOuterにラップされます。これは垂直センタリング用です。 PanelLabelInnerにラベルを追加する必要があります。
私はBUiltXML関数を完成させる必要があります。まず、モードが変わったら、すべてのラベルを削除して、新しいラベルを表示するためにuiを更新します:どのようにすればいいですか?
$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')
}
'を呼び出します([アクション[文字列]] {' - > 'を呼び出します([アクション[文字列]] [のScriptBlock] ::' { – PetSerAl
感謝を作成しますが、あなたが私に与えることができますより完全なサンプル? – mrplume
もっと完全なサンプルを提供するにはどうすればよいか分かりません。現在、あなたのコードには1つのエラーがあります:[適切なcross' Runspace'呼び出し](http://stackoverflow.com/a/34691632)。それを修正する必要があります。 – PetSerAl