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