運行腳本
該文本編輯器中,只能點擊工具條的“運行腳本”的下拉菜單的某個項目 才能運行腳本方法。在屬性該下拉菜單的RefreshScriptMethodList中為每個菜單項目的點擊 事件綁定了ScriptItem_Click方法,該ScriptItem_Click代碼為
/// <summary>
/// 運行腳本的下拉菜單項目點擊事件處理
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void ScriptItem_Click (object sender, System.EventArgs args)
{
ToolStripMenuItem item = (ToolStripMenuItem)sender;
try
{
// 調用腳本執行指定名稱的腳本方法
myVBAEngine.Execute(item.Text, null, true);
}
catch (Exception ext)
{
System.Console.WriteLine("執 行腳本 " + item.Text + " 錯誤:" + ext.ToString());
MessageBox.Show(this, "執行腳本 " + item.Text + " 錯誤:" + ext.Message);
}
}
ScriptItem_Click方法中,首先獲得 用戶點擊的菜單項目,然後調用腳本引擎的Execute方法來執行腳本,菜單項目顯示的文本就 是腳本方法的名稱。
演示用腳本代碼說明
程序目錄下有一個demo.vbs的文本 文件,該文件內容就是演示實用的VBA.Net腳本。該腳本代碼為
sub 顯示當前 使用的腳本代碼()
document.text = window.engine.ScriptText
end sub
sub 插入當前時間()
document.Selection = DateTime.Now().ToString("yyyy年MM月dd日HH:mm:ss")
end sub
sub 屏幕狀態()
window.alert("屏幕大小:" & window.ScreenWidth & " * " & window.ScreenHeight _
& vbcrlf & "窗體位置:" & window.left & " " & window.top _
& vbcrlf & "窗體大小:" & window.Width & " * " & window.height )
end sub
sub ShowText()
window.alert( document.text )
end sub
sub MoveWindow()
window.left = 100
end sub
sub ShowFileName()
window.alert( "當前文件名為:" & document.FileName )
end sub
sub AniMoveWindow()
window.left = window.left - 10
if( window.left > 10 )
window.SetTimeout( 500 , "AniMoveWindow" )
end if
end sub
dim Rate as double
sub 模擬顯示正铉曲線()
Rate = Rate + 0.1
if( Rate > 50 )
exit sub
end if
dim strText as new string( " " , 50 + cint( math.sin( Rate ) * 30 ))
document.AppendText( vbcrlf & strText & "######" )
window.SetTimeout( 100 , "模擬顯示正铉曲線")
window.Title = math.sin( Rate )
end sub
dim strTitle as string = "《C#發 現之旅》系列課程的VB.Net腳本演示袁永福編寫版權所有2008年"
dim TitleCount as integer
sub 在標題欄顯示移動字幕()
TitleCount = TitleCount + 1
if( TitleCount > strTitle.Length )
TitleCount = 0
exit sub
end if
window.Title = strTitle.SubString( strTitle.Length - TitleCount , TitleCount )
window.SetTimeOut( 100 , "在標題欄顯示移動字幕")
end sub
這 裡說明一下“模擬顯示正铉曲線”這個腳本方法,首先定義一個Rate的全局變量 作為計數器,每執行一次該計數器加一,若超過50則退出方法,腳本中使用sin函數計算出空 白字符串的長度生成一個空白字符串,然後使用文檔對象的AppendText方法向當前編輯的文 檔添加空白字符和結尾字符,這裡腳本調用window對象的SetTimeout方法來延期調用這個腳 本方法自己。於是這個腳本方法每隔100毫秒執行一次,並使用文本模擬顯示正铉曲線,若顯 示了50次則停止執行。
這樣袁某就完成了一個簡單的文本編輯器程序,而且該程序能 使用VBA.Net腳本引擎來擴展功能,能方便的進行二次開發。
部署腳本引擎
在 實際開發中,開發人員可以將XVBAEngine等C#代碼拷貝到應用程序中即可添加腳本功能,也 可以將修改本C#工程的屬性使其單獨編譯成一個DLL然後供其他.Net程序使用。部署起來非常 方便。
小結
在本次課程中,筆者使用動態編譯技術實現了VBA.NET腳本引擎, 目前很多商業軟件,比如Office,VS.Net等等都具有二次開發用的VBA腳本技術,使用本課程 介紹的知識我們也可以為應用系統配置功能強大的腳本引擎,這能比較大的提高應用系統的 靈活性。腳本引擎技術是一個非常實用的軟件開發技術,值得推廣。