Windows PowerShell最突出之處便在於.NET類庫的支持,很大的擴展了腳本的 能力。這使我們能直接在腳本中通過System.Windows.Forms程序集來創建窗口。
今天初次嘗試了一下在PowerShell下創建WinForm程序,將完成的這個簡單的 例子分享給大家。
如同在C#編寫WinForm程序中一樣,先創建一個Form類的實例,然後初始化: 添加流式布局面板,在面板上加了一個文本框和一個按鈕,給控件添加必要的事 件處理。當然使用C#的時候通常是VS自動為我們生成一個窗體類,並添加了一些 成員和初始化工作的代碼。不過ps貌似還沒有支持WinForm的IDE。
在Form對象創建完畢之後我們就可以把它顯示出來了。先使用Application類 啟用視覺效果,再用Application.Run(Form)方法顯示窗口,啟動消息循環。
Application.Run()可以為我們正確處理窗口的消息循環,在Run()方法外自行 Show窗口會讓窗口一閃而過。
因為代碼比較簡單,熟悉c# WinForm編程的同學應該能一目了然,所以不再做 詳細說明。
需要注意的是ps使用反射動態加載程序集的方法和ps中事件的處理方式。
[Reflection.Assembly]::LoadWithPartialName ("System.Windows.Forms")
$app=[System.Windows.Forms.Application]
$myForm=new-object System.Windows.Forms.Form
$myForm.Text="my window"
$button1 = new-object System.Windows.Forms.Button
$button1.Size = new-object System.Drawing.Size -argumentlist 75, 23
$button1.Text = "點我試試"
$textbox1=new-object System.Windows.Forms.TextBox
$textBox1.Multiline = $true;
$textBox1.Text = "hello world"
$textBox1.Size = new-object System.Drawing.Size -argumentlist 281, 227
$flowLayoutPanel1 = new-object System.Windows.Forms.FlowLayoutPanel
$myForm.Controls.Add($flowLayoutPanel1)
$flowLayoutPanel1.Controls.Add($textBox1);
$flowLayoutPanel1.Controls.Add($button1);
$flowLayoutPanel1.Dock = "Fill"
$flowLayoutPanel1.FlowDirection = "TopDown"
$button1ClickEventHandler = [System.EventHandler] {
[System.Windows.Forms.MessageBox]::Show("Hello world! ")
}
$button1.Add_Click($button1ClickEventHandler)
$app::EnableVisualStyles()
$app::Run($myForm)
執行效果如下圖: