2011-03-09 13 views
6

के लिए WPK का उपयोग करके हमने कुछ बेहतरीन PowerShell स्क्रिप्ट बनाई हैं। लेकिन जैसे ही समय जाता है हमने स्क्रिप्ट को गैर प्रोग्रामर को दिया है। इसलिए हमने फैसला किया कि यह PowerShell के लिए जीयूआई को समझने में आसान आसान समय था।PowerShell GUI

मैंने जेम्स ब्रुंडेज द्वारा चैनल 9 वीडियो देखे हैं। उनके वीडियो विंडो, स्टैक-पैनल, डॉक्टर-पैनल, ग्रिड, लेबल और टेक्स्टबॉक्स को समझाते हुए एक शानदार काम करते हैं। हालांकि कुल मिलाकर 60 से अधिक नियंत्रण हैं। डब्ल्यूपीएफ नहीं जानता है मदद नहीं करता है।

मैं करना चाहते हैं क्या है निम्न कार्य करने में सक्षम हो:

पाठ इनपुट
ड्रापडाउन सूची
RadioButton समूह
चेकबॉक्स समूह

मैं एक उदाहरण है कि के साथ आया था पहले तीन लेकिन बग के साथ।
रेडियो नियंत्रण दृष्टि से पहला बटन दिखाता है, लेकिन जब मैं समूह के लिए मूल्य खींचता हूं तो यह सही नहीं है।

मुझे चेकबॉक्स के लिए कोई उदाहरण नहीं मिल रहा है।

किसी भी सुझाव की सराहना की जाएगी।

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

बर्ड, यह तब होता है जब मैं चयनित बटन वापस पाने का प्रयास करता हूं, यह मुझे वह नहीं देता है जिसे मैंने चुना है। – Razcer

+0

मैंने प्रारंभिक राज्य, मध्य, दाएं, बाएं रेडियो बटन और 'कॉल पीएस स्क्रिप्ट' के सभी ई मामलों का परीक्षण किया: रेडियो => पहला, रेडियो => पहला, रेडियो => तीसरा, रेडियो => पहला। क्या आपको हमेशा एक ही मूल्य मिलता है या आप अलग होते हैं, लेकिन गलत मान? –

उत्तर

0

जहां तक ​​मैं समझता हूँ, आप एक PowerShell स्क्रिप्ट आप ने लिखा की चोटी पर एक जीयूआई बनाना चाहता है:

यहाँ PowerShell में WPK की मेरी परीक्षा है।

मेरी राय यह है कि आपके पास दो तकनीकी समाधान हैं।

  1. आप Windows फार्म है, जो डी .NET फ्रेमवर्क में जीयूआई का निर्माण करने के
  2. आप WPF के शीर्ष पर एक जीयूआई का निर्माण पूर्व तरीका है के शीर्ष पर एक जीयूआई का निर्माण, जो करने के लिए एक नया तरीका है डी .NET फ्रेमवर्क में जीयूआई निर्माण

पहले समाधान में आप सीधे दृश्य स्टूडियो के साथ अपने प्रपत्र बना सकते हैं और "transform" यह, या नामक एक Sapien कंपनी उपकरण के साथ इसे बनाने के "PrimalForms Community Edition" जो एक नि: शुल्क GUI बिल्डर है PowerShell उपयोगकर्ताओं के लिए उपकरण। आप अपना जीयूआई (एक .NET डेवलपर की तरह) बनाते हैं और टूल पावरशेल सिंटैक्स में विंडो फॉर्म कोड उत्पन्न करता है। आपको बस अपनी स्क्रिप्ट फ़ंक्शन को सही जगह पर कॉल करना होगा (प्रत्येक ईवेंट स्क्रिप्ट ब्लॉक के लिए जेनरेट किया गया है)। यह समाधान सामान्य रूपों के लिए ठीक है।

डब्ल्यूपीएफ समाधान उस मामले के लिए थोड़ा और हालिया और विशेष समर्पित है जिसमें आप अपने फॉर्म में 2 डी या 3 डी ग्राफ जोड़ना चाहते हैं या विभिन्न स्क्रीन आकार में अनुकूलन करना चाहते हैं। इस समाधान में आपको अपने फॉर्म का एक्सएएमएल प्रस्तुत करना होगा (उदाहरण के लिए विजुअल स्टूडियो 2010 एक्सपेस के साथ) और फिर इसे PowerShell में लोड करें। PowerShell को शुरू करने के लिए इस समाधान को PowerShell 2.0 और फ्रेमवर्क 3.5 स्थापित प्लस विशेष झंडे (-STA) की आवश्यकता है। मेरे लिए WPK मॉड्यूल इस समाधान पर buid है।

यह PowerShell में चार्ट बनाने का एक तरीका भी मौजूद है।

यदि आप एक या अन्य समाधान में रूचि रखते हैं, तो कृपया मुझे बताएं।

मुझे उम्मीद है कि यह मदद करेगा।

जेपी

+0

जेपी, मैं विशेष रूप से PowerShellPack (WPK) का उपयोग करके ऐसा करने की कोशिश कर रहा हूं और विंडोज़ फॉर्म बनाकर नहीं। उदा: एक स्क्रिप्ट चलाएं जो कुछ साधारण इनपुट के लिए एक छोटी सी विंडो खोलती है। एक बटन के साथ जो प्रदान किए गए इनपुट का उपयोग करने के लिए अधिक स्क्रिप्ट को कॉल करता है। मैं इसे न्यू-टेक्स्टबॉक्स/न्यू-कॉम्बोबॉक्स (मैन्युअल रूप से आइटम जोड़कर) के साथ काम कर सकता हूं लेकिन अभी भी कॉम्बोबॉक्स के बजाय न्यू-रेडियोबटन (सूची)/न्यू-चेकबॉक्स (सूची) और संभावित रूप से एक सूची बॉक्स के लिए वाक्यविन्यास उदाहरण ढूंढने का प्रयास कर रहा हूं। – Razcer

0

radiobuttons का $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" 

पता लगाने के लिए कि क्या एक चेक बॉक्स:: आप करने के लिए अपने नए-RadioButton भाव को छोटा कर सकता है

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

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

चेक किया गया है, तो आप भी अपनी IsChecked संपत्ति का अनुमान लगा होगा