2014-07-29

Kuriame GUI PowerShell pagalba

Pabandysime sukurti keletą paprastų langų naudojant vien tik PowerShell galimybes. Deja, bet pats PowerSehll'as neturi jokių galimybių sukurti savo nuosavus langus. Taigi tam, kad sukurtume langus mums teks gauti priėjimą prie .NET freimwork'o WinForms interfeiso.



Šiektiek apie WinForms.

WinForms yra .NET freimwork'o dalis sukurta tam, kad būtų galima kurti Windows aplinkai tinkantį GUI. Jis leidžia kontroliuoti lango elementus, tokius, kaip mygtukai ir antraštes patalpintas konteineryje bei tokiose, kaip formos ir po to parodyti viską vartotojui. Ivykių apdorojimo mechanizmas leidžia programuotojui priskirti kokie veiksmai bus daromi. Pavyzdžiui paspaudus mygtuką arba pakeitus lango dydį.

Mes šiame straipsnyje pamėginsime parodyti kelis pavyzdžius, kaip naudotis WinForms pagrįstu GUI naudojant PowerShell.


Powershell GUI pagrindai.

Tam, kad pilnavertiškai naudotis .Net kuriamais langais reikia iš pradžių į mūsų rašomą skriptą įtraukti WinForms. Tai mes galime padaryti pasinaudoję šia komanda:
[reflection.assembly]::LoadWithPartialName( "System.Windows.Forms")

Kai tik bus užkrautas System.Windows.Forms mes būsime pasruošę kurti paprastus langus.
Dabar kai WinForms yra užkrautas galime kurti langą. Toliau sukursime formą (konteinerį) ir mygtuką (controler'į). Įdėsime mūsų mygtuką į formą ir parodysime vartotojui:
[reflection.assembly]::LoadWithPartialName( "System.Windows.Forms")
$form= New-Object Windows.Forms.Form

$button = New-Object Windows.Forms.Button

$button.text = "Click Here!"

$form.controls.add($button)
$form.ShowDialog()


Įvykdytas kodas mums parodys štai tokį vaizdą:



PowerShell ir WinForms įvykių apdorojimas.

Visi įvykiai yra susiję su formomis, todėl, bet koks veiksmas formoje, pavyzdžiui mygtuko paspaudimas ar reikšmių įvedimas į lauką iškviečia įvykį. Įvykio apdorojimas yra tiesiog paprasta kodo eilutė, kuri apibrėžia kas turi būti padaryta įvykus įvykiui. PowerShell'e įvykio apdorojimai yra aprašomi taip: objektas.add_įvykis ({„ką daryti?“}), kur vietoj „ką daryti?“ įrašoma kas turi būti padaroma po įvykio.
$button.add_click({ $form.close() })

Šis kodas apdoroja mygtuko paspaudimą ir paspaudus mygtuką mūsų langas užsidarys.


Pirmas naudingas langas.

Dabar kai mes turime šiokius tokius pagrindus, galime pamėginti sukurti paprastą langą, kuris iš įvedimo lauko paima mūsų vardą ir jį parodo lange. Šiam reikalui mes sukursime po vieną mygtuką, įvedimo lauką ir antraštę. Mūsų mygtuko įvykių apdorojimas visus duomenis įvestus į įvedimo lauką išves į mūsų langą. Objektų buvimo vietą ir dydį galime koreguoti su Drawing. Galutinis mūsų skripto kodas:
# Užkrauname WinForms
[reflection.assembly]::LoadWithPartialName( "System.Windows.Forms")

# Sukuriame formą
$form = New-Object Windows.Forms.Form

# Lango antraštė
$form.text = "PowerShell WinForms Example"

# Sukuriame antraštės vietą, dydį ir tekstą
$label = New-Object Windows.Forms.Label
$label.Location = New-Object Drawing.Point 50,30
$label.Size = New-Object Drawing.Point 200,15
$label.text = "Enter your name and click the button"

# Sukuriame įvedimo lauko vietą, dydį ir tekstą
$textfield = New-Object Windows.Forms.TextBox
$textfield.Location = New-Object Drawing.Point 50,60
$textfield.Size = New-Object Drawing.Point 200,30

# Sukuriame mygtuką
$button = New-Object Windows.Forms.Button
$button.text = "Greeting"
$button.Location = New-Object Drawing.Point 100,90

# Mūsų įvykių apdorojimas lauko reikšmę išves į langą
$button.add_click({
$label.Text = "Hello " + $textfield.text
})

# Kontroleriai
$form.controls.add($button)
$form.controls.add($label)
$form.controls.add($textfield)

# Rodome viską vartotojui
$form.ShowDialog()

Komentarų nėra:

Rašyti komentarą