程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(下)(6)

C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(下)(6)

編輯:關於C語言

運行腳本

該文本編輯器中,只能點擊工具條的“運行腳本”的下拉菜單的某個項目 才能運行腳本方法。在屬性該下拉菜單的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腳本技術,使用本課程 介紹的知識我們也可以為應用系統配置功能強大的腳本引擎,這能比較大的提高應用系統的 靈活性。腳本引擎技術是一個非常實用的軟件開發技術,值得推廣。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved