国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在IE中使用VS.net WinForm控件

2024-07-10 13:01:20
字體:
來源:轉載
供稿:網友
在visual studio .net中,類似于applet或activex控件,winform控件可以嵌入ie中使用。嵌入ie的windows窗體控件不要求注冊,不需用戶提示即可激活。我們可以很方便地實現一些webform中實現起來相對麻煩的交互操作,結合.net remoting等技術訪問后臺數據庫,則可生成功能強大而且美觀的webform頁面。
使用該技術,需要客戶端安裝.net framework及ie 6.0,在windows 2003中已經自帶了.net framework。
嵌入webform的winfrom控件利用公共語言運行庫代碼訪問安全性,一些特殊操作還需要設置訪問權限。



下面就讓我們做個簡單的例子,在winform用戶控件中使用gdi+實現畫線功能,并把它嵌入ie瀏覽器。
開發環境:windows 2000專業版、visualt studio .net 2002

1.創建winform用戶控件
我們可以建立一個“windows控件庫”項目,最后嵌入瀏覽器時只需要生成的dll文件。但為了方便調試,我們可以先把控件嵌入winform中。
新建“windows應用程序”,名稱為winforminwebform,生成的解決方案也名稱為winforminwebform。在解決方案中再添加一個“windows控件庫”項目winformcontrol,系統在該項目中自動添加一個了usercontrol1的用戶控件,刪除該控件,然后在“windows控件庫”項目中添加一個用戶控件winformgdictrl。
現在我們先把該控件加如“windows應用程序”的form1中。
首先需要生成解決方案以生成控件的dll文件。然后打開工具箱,點右鍵選擇“添加選項卡”,在工具箱中添加一個“winform控件”選項卡。在該選項卡上點右鍵,選擇“自定義工具箱”,彈出自定義工具箱頁面。切換到.net框架組件頁面,單擊瀏覽,到“/winformcontrol/bin/debug”目錄選擇winformcontrol.dll文件,打開后在“winform控件”選項卡里就會出現winformgdictrl控件,這時就可以把該控件拖動到form1上了。




打開winformgdictrl.cs文件,我們可以看到winformgdictrl類繼承自system.windows.forms.usercontrol。
由于我們要使用gdi+繪圖,為防止由控件重繪引起的閃爍,我們可以啟用雙緩沖,指定控件的controlstyles.doublebuffer為true。要完全啟用雙緩沖,必須也要將 userpaint 和 allpaintinginwmpaint位數設置為 true。在構造函數中加入
public winformgdictrl()
{
initializecomponent();

this.setstyle(controlstyles.userpaint,true);
this.setstyle(controlstyles.allpaintinginwmpaint,true);
this.setstyle(controlstyles.doublebuffer,true);
}

添加一個類lineobj,用于保存線對象,并給該類添加一個draw方法用于畫線
using system;
using system.drawing;
namespace winformcontrol
{
public class lineobj
{
public point m_startpoint; //起始點
public point m_endpoint; //截止點

public lineobj(int x,int y)
{
m_startpoint=new point(x,y);
m_endpoint=new point(x,y);
}

public void draw(graphics g)
{
g.drawline(new pen(color.blue,2),m_startpoint,m_endpoint);
}
}
}

在winformgdictrl類中添加兩個類變量
private arraylist m_arraylines;
private bool m_bdrawing;
m_arraylines為線對象集合,m_bdrawing指示是否畫線。
并在類構造函數中初始化變量
m_arraylines=new arraylist();
m_bdrawing=false;
給控件添加mousedown,mousemove,mouseup及paint事件響應函數
private void winformgdictrl_mousedown(object sender, system.windows.forms.mouseeventargs e)
{
lineobj m_lineobj=new lineobj(e.x,e.y);
m_arraylines.add(m_lineobj);
m_bdrawing=true;
}

private void winformgdictrl_mousemove(object sender, system.windows.forms.mouseeventargs e)
{
if(m_bdrawing)
{
lineobj m_lineobj=(lineobj)m_arraylines[m_arraylines.count-1];
m_lineobj.m_endpoint=new point(e.x,e.y);
this.invalidate();
}
}

private void winformgdictrl_mouseup(object sender, system.windows.forms.mouseeventargs e)
{
m_bdrawing=false;
}

private void winformgdictrl_paint(object sender, system.windows.forms.painteventargs e)
{
graphics g=e.graphics;
g.fillrectangle(brushes.yellow,this.clientrectangle);

foreach(object obj in m_arraylines)
{
lineobj m_lineobj=(lineobj)obj;
m_lineobj.draw(g);
}
}
生成解決方案,運行form1,你就可以看到控件的效果了
打開/winformcontrol/bin/debug目錄,其中的winformcontrol.dll就是我們所需要的

2.把控件嵌入ie瀏覽器
新建一個虛擬目錄winformctrl,把winformcontrol.dll文件復制進該目錄中,再在該目錄中創建一個帶有object標記的html文件test.htm
<html>
<head>
</head>
<body>
<object id="drawcontrol" classid="http:winformcontrol.dll#winformcontrol.winformgdictrl" height=300px width=400px viewastext></object>
</body>
</html>
其中我們關心的是objcect標記的classid,classid分為兩部分:控件名(可包括路徑)和控件的完全限定名,中間用“#”相隔。完全限定名由“命名空間.類名”組成
從示例來看
winformcontrol.dll為控件名,winformcontrol為控件命名空間,winformgdictrl為控件類名。
打開ie,在地址欄輸入http://localhost/winformctrl/test.htm,在你的控件上畫畫線吧

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 斗六市| 内乡县| 蓬安县| 樟树市| 通州市| 左权县| 万安县| 北海市| 尤溪县| 澄江县| 阜新市| 阳西县| 喀喇沁旗| 武鸣县| 石林| 太谷县| 交城县| 乾安县| 乌拉特后旗| 西乡县| 鞍山市| 镇康县| 光山县| 枣阳市| 巨鹿县| 犍为县| 阜阳市| 天津市| 平乐县| 廊坊市| 治县。| 运城市| 金湖县| 樟树市| 平潭县| 柳江县| 常州市| 吕梁市| 綦江县| 通许县| 陵川县|