2016-07-21 14 views
0

私の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') 
} 
+0

'を呼び出します([アクション[文字列]] {' - > 'を呼び出します([アクション[文字列]] [のScriptBlock] ::' { – PetSerAl

+0

感謝を作成しますが、あなたが私に与えることができますより完全なサンプル? – mrplume

+0

もっと完全なサンプルを提供するにはどうすればよいか分かりません。現在、あなたのコードには1つのエラーがあります:[適切なcross' Runspace'呼び出し](http://stackoverflow.com/a/34691632)。それを修正する必要があります。 – PetSerAl

答えて

0

私は」:このコードで

は、何も追加されていない、私は、更新、リフレッシュ...

桂実行空間のようなものを使用しなければならないと仮定します解決策が見つかりました...この機能は、ラベルの数に関連してフローレイアウトパネルも作成しました。だから私は良い高さのflowlayoutパネルを持っています。私は、切り替える必要があるときに外側のパネルをクリアするだけで、これらのラベルを追加してからアップデートを行う必要があります。

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() 
     } 
    ) 

}

関連する問題