2011-03-09 163 views
6

我們創建了一些很棒的PowerShell腳本。但隨着時間的推移,我們已經將腳本交給了非程序員。所以我們決定是時候爲PowerShell簡單易懂的GUI了。將WPK用於PowerShell GUI

我看過詹姆斯布倫戴奇的9頻道錄像。他的視頻在解釋Window,Stack-Panel,Doc-Panel,Grid,Labels和Textboxes方面做得非常出色。 但是總共有60多個控件。不知道WPF沒有幫助。

我想什麼做的是能夠做到以下幾點:

文本輸入
下拉列表
單選按鈕組
複選框組

我想出了,做了一個例子前三名但有bug。
無線電控制器直觀地顯示了第一個選擇的按鈕,但是當我拉出該組的值時,它是不正確的。

我找不到複選框的示例。

任何提示將不勝感激。

這是我在PowerShell的朝鮮勞動黨測試:

function TestGui { 
    Import-Module WPK 

    $SelectedRadio = "First" 

    New-Window -Title "Test User Input" -WindowStartupLocation CenterScreen ` 
     -Width 400 -Height 300 -Show { 

     New-Grid -Rows 32*, 32*, 32*, 32* -Columns 100, 1* { 

     #create style to use on controls 
     $createLblStyle = @{ 
      Margin = 5 
      HorizontalAlignment = "right" 
      VerticalAlignment = "center" 
     } 

     #Label Text for this row 
     New-TextBlock -Text "Pick fruit" ` 
      -Row 0 -Column 0 @createLblStyle 

     # dropdown (combo box) 
     New-ComboBox -Name FruitList ` 
      -row 0 -column 1 @createLblStyle ` 
      -Items { "Apple", "Pear", "Peach" } -SelectedIndex 0 

     #Label Text for this row 
     New-TextBlock -Text "Pick number" ` 
      -Row 1 -Column 0 @createLblStyle 

     # TextBox 
     New-TextBox -Name TextInputName ` 
      -Row 1 -Column 1 @createLblStyle 

     #Label Text for this row 
     New-TextBlock -Text "Get Text Input" ` 
      -Row 2 -Column 0 @createLblStyle   

     #Do three radio buttons for this row. 
     New-StackPanel -Row 2 -Column 1 -Orientation Horizontal { 
      New-RadioButton -Content "Pick first" ` 
       -GroupName Results -IsChecked $True -On_Click { 
        $SelectedRadio = "First" 
       } 

      New-RadioButton -Content "Pick two" ` 
       -GroupName Results -On_Click { 
        $SelectedRadio = "Second" 
       } 

      New-RadioButton -Content "Pick three" ` 
       -GroupName Results -On_Click { 
        $SelectedRadio = "Third" 
       } 
     } 


     New-Button -Content "_Call PS Script" -Row 3 -Column 0 -Margin 3 -On_Click { 
      $FruitList   = $window | Get-ChildControl FruitList 
      $TextInputName  = $Window | Get-ChildControl TextInputName 
      $Results   = $Window | Get-ChildControl Results 

      $Window.Close() 
      write-host "call PS script with: " 
      write-host "DropDown => " $FruitList.SelectedValue 
      write-host "TextBox => " $TextInputName.Text 
      write-host "Radio => " $SelectedRadio 
    } 

     New-Button -Content "Cancel" -Row 3 -Column 1 -Margin 3 -On_Click { 
      $Window.Close() 
      write-host "Cancel was pressed" 
     } 
     } 
    } 
} 
+0

單選按鈕有什麼問題?我看不到任何東西。 –

+0

bernd,這是當我試圖讓選定的按鈕回來,它並沒有給我一個我選擇的。 – Razcer

+0

我測試了所有電子情況的初始狀態,中間,右側,左側單選按鈕和'Call PS Script'給出:Radio => First,Radio => First,Radio => Third,Radio => First。你是否總是獲得相同的價值,或者你獲得了不同的價值,但是錯誤的價值觀? –

回答

0

據我瞭解,你想創建你寫了一個PowerShell腳本的頂部的GUI。

我的意見是,你有兩個技術解決方案。

  1. 您建立在Windows窗體,這是建立在GUI德.NET框架
  2. 您建立在WPF的頂部的GUI前一種方法的頂部的GUI,至極是一種新的方式來在德.NET框架構建GUI

在第一個解決方案,您可以直接用Visual Studio創建您的形式和「transform」,或與被稱爲Sapien公司工具創建「PrimalForms Community Edition」至極是一個免費的GUI構建PowerShell用戶的工具。您可以構建GUI(如.NET開發者),並且該工具使用PowerShell語法生成Window Form代碼。您只需在正確的位置(爲每個事件腳本塊生成的那個)調用腳本函數。這種解決方案適用於正常形式。

WPF解決方案是一個更新和特殊的專用於您想在表單中添加2D或3D圖形或適應不同屏幕大小的情況。在此解決方案中,您必須構建表單的XAML表示(例如,使用visual studio 2010 Expess),然後將其加載到PowerShell中。此解決方案需要安裝PowerShell 2.0和Framework 3.5以及特殊標誌(-STA)才能啓動PowerShell。對我來說,WPK模塊就是用這個解決方案來構建的。

它也存在一種在PowerShell中創建圖表的方法。

如果您對某個或其他解決方案感興趣,請告訴我。

我希望它有幫助。

JP

+0

JP, 我正在嘗試使用PowerShellPack(WPK)來執行此操作,而不是通過創建Windows窗體。例如:運行一個腳本,爲一些簡單的輸入打開一個小窗口。使用一個調用更多腳本來使用提供的輸入的按鈕。我可以使它與New-TextBox/New-ComboBox一起工作(通過手動添加項目),但我仍然嘗試爲New-RadioButton(List)/ New-CheckBox(List)以及可能的ListBox而不是ComboBox查找語法示例。 – Razcer

0

更改到$Script:SelectedRadioOn_Click單選按鈕的scriptblocks。

0

要找出你的三個單選按鈕已經被選中,你可以使用下面的表達式:如果你只有一個單選按鈕組

if (($Window | Get-ChildControl 'One').IsChecked) { 
    $SelectedRadioButton = '1' 
} elseif (($Window | Get-ChildControl 'Two').IsChecked) { 
    $SelectedRadioButton = '2' 
} elseif (($Window | Get-ChildControl 'Three').IsChecked) { 
    $SelectedRadioButton = '3' 
} 

,沒有必要指定一組名稱。也不需要On_Click事件。您可以縮短新單選表達式:

New-RadioButton -Name 'One' -Content "Pick first" -IsChecked $true 
New-RadioButton -Name 'Two' -Content "Pick two" 
New-RadioButton -Name 'Three' -Content "Pick three" 

爲了找到答案,無論是一個複選框:

New-CheckBox -Name 'Uno' -Content "Uno" 

檢查完畢後,你也推斷其器isChecked屬性:

Write-Host "Checkbox UNo => " ($Window | Get-ChildControl UNo).IsChecked