如何用c#來制作一個activeX控件或類似的東西發(fā)布時間: 2007-04-19 02:05 作者: 未知 來源: 未知 瀏覽: 17 評論
Q cat:
操作系統(tǒng): 2000/xp 編程工具: vs.net 2003 /c# 問題: 我想制作一個activeX控件或類似的東西,有用戶界面的,然后想在ie中使用,通過Vbscript與其進(jìn)行數(shù)據(jù)交換,在以前好像可以使用vb就能做 到,但是現(xiàn)在是vs.net 2003企業(yè)版,好像已經(jīng)進(jìn)化了,activeX成了老的技術(shù),那vs.net如何解決這種類似的問題?如果要使用c#來編程的話,具體如何操作?還要有 界面。 A回答: 在C#中和ActiveX控件對應(yīng)的是Windows控件庫(User Controls)。 在IE中激活Windows Forms控件可以分五步來完成: * 創(chuàng)建Windows Forms控件; * 創(chuàng)建一個包含對象標(biāo)簽的HTML文檔; * 創(chuàng)建虛擬目錄,復(fù)制并設(shè)置權(quán)限; * 配置代碼訪問權(quán)限; * 運行該控件。 1. Windows Forms控件:SimpleControl.dll 幾乎所有的Windows Forms控件都可以用,但在這個例子里,我們使用的是包含在.NET Framework SDK QuickStart Tutorial Creating Controls中的SimpleControl控件。 2. HTML文檔: SimpleControl.html 接下來一步是生成內(nèi)有一個對象tag的HTML文檔,以激活Windows Forms控件。此外,還要加入一些腳本和輸入tag(input tags)到該控件的示范程序入口。 <object id="simpleControl1" classid="http:SimpleControl.dll#Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl" height="300" width="300"> <param name="Text" value="Simple Control"> </object> 對象tag: classid包含兩個有趣的部分:導(dǎo)向控件庫的路徑和全名(fully qualified name),中間用“#”隔開。如果您熟悉ActiveX對象tag的話,您會發(fā)現(xiàn)我們沒有使用GUID。在Windows 表單中,路徑和全名(fully qualified name)合并在一起的整體被用來當(dāng)作唯一的識別符。 參數(shù)tag被用來設(shè)置控件的屬性:“name”參數(shù)是屬性名,而“value”參數(shù)則是屬性的值。 腳本: <script> function ChangeText() { simpleControl1.Text = text1.value; } </script> -------------------------------------------------------------------------------- <input type="text" id="text1"> <input type="button" value="Change Text" onclick="ChangeText()"> 您可以寫一個腳本來獲得控件的程序入口,頁面上的按鈕和文本框已關(guān)聯(lián)到一個簡單的函數(shù)ChangeText,以設(shè)置該控件的text屬性。為了是修改的結(jié)果體現(xiàn)出來,控件必須重繪(調(diào)用invalidated()實現(xiàn))。 完整代碼 下面是這個例子完整的HTML代碼: <html> <script> function ChangeText() { simpleControl1.Text = text1.value; } </script> <body> <p>Simple Control</p> <br> <br> <object id="simpleControl1" classid="http:SimpleControl.dll#Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl" height="300" width="300"> <param name="Text" value="Simple Control"> </object> <br> <br> <input type="text" id="text1"> <input type="button" value="Change Text" onclick="ChangeText()"> </body> </html> 3. 虛擬目錄: 創(chuàng)建一個新的虛擬目錄,并將控件(SimpleControl.dll)和HTML文檔(SimpleControl.html)放到這個目錄里。 注意:將該虛擬目錄的執(zhí)行權(quán)限設(shè)置為“腳本”,如果將執(zhí)行權(quán)限設(shè)置為“腳本& 執(zhí)行”的話,控件將不能正常激活。 4 配置代碼訪問權(quán)限 如果你是在intranet運行這個例子,并且沒有改變.Net Framework的安全策略,這個例子可以正確運行了。如果你改變了安全策略,或者你打算從Internet網(wǎng)站運行,你需要配置Internet Explorer或者改變安全策略。一個辦法將控件運行和下載的頁面加入信任域??梢栽贗nternet Explorer使用以下步驟完成: 1. 選擇“工具|選項” 2. 選擇"安全"項 3. 選擇"受信任的站點" 4. 點擊“站點”按鈕。 5. 添加你的站點 6. 點擊“確定” 你也可以配置.net framework安全策略。SDK文檔中包括了如何配置安全策略的內(nèi)容。 5. 運行控件: 用IE瀏覽器里指明虛擬目錄和SimpleControl.html文件,即運行該控件。如果控件沒有被正常激活,則可能需要重啟一下IE或清空assembly下載緩存(assembly download cache)。 注意: 您可以使用gacutil /ldl查看您的assembly下載緩存的內(nèi)容??梢允褂胓acutil /cdl清除緩存內(nèi)容。 建議參考文章Using Windows Forms Controls in Internet Explorer(http:///articles/iesourcing.aspx)。 cat: 謝謝你的回答,如何能得到全名(fully qualified name)?c#建立的控件都能用嗎?跟普通控件有區(qū)別嗎?我希望控件下載到客戶端運行的(出現(xiàn)安全警告沒關(guān)系),能行嗎? 答:上面的Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl就是全名,你可以在項 目的屬性對話框中設(shè)置根命名空間。一般建立的C#控件都可以使用,不過這方面還沒有確切的資料。一般控件下載不是大問題,只要安全選項設(shè)好了就可以。但是 一個大問題是在沒有安裝過.NET平臺的機器上需要安裝大約20M的.NET平臺文件,有點麻煩。 |
|
|