日期:2011-04-01  浏览次数:20419 次

首先引用Microsoft Windows 窗体快速入门教程上的文章"在 Internet Explorer 中使用 Windows 窗体控件":(如果引用的一些信息无法正常显示,请直接上面上的链接查看)

本主题描述如何在 Internet Explorer (IE) 内成功地执行 Windows 窗体控件。IE 内的 Windows 窗体控件无需用户提示即可激活,它不要求注册,而且利用公共语言运行库 (CLR) 代码访问安全性。

在 Internet Explorer 内激活 Windows 窗体控件需要五步,这里列出了每一步,并在下面详细介绍。

创建 Windows 窗体控件。
创建带有 object 标记的 HTML 文档。
创建虚拟目录并设置权限。
运行该控件。
创建 Windows 窗体控件
在 Internet Explorer 中几乎可以承载任何 Windows 窗体控件,但是对于此示例,我们将承载本快速入门教程的创建控件部分中包含的 SimpleControl。该控件必须安装到全局程序集缓存中或者与包含它的 Web 页位于同一虚拟目录中。



创建带有 object 标记的 HTML 文档
下一步是创建带有 object 标记的 HTML 文档,该标记引用 Windows 窗体控件。对于此示例,还将添加一些简单的脚本和输入标记,以演示对该控件进行编程访问。

<object id="simpleControl1"

classid="http:SimpleControl.dll#Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl"
height="300" width="300" VIEWASTEXT>
<param name="Text" value="Simple Control">
</object>


classid 有两个令人感兴趣的部分:指向控件库的路径和控件的完全限定名,这两者由 # 号分隔开。如果您熟悉 ActiveX object 标记,将注意到缺少一个 guid。在 Windows 窗体中,路径和完全限定类名的组合作为唯一标识符。

Param 标记可用于设置控件上的属性。在这种情况下,name 特性是属性的名称,value 特性是属性的值。


<script>

function ChangeText() {
simpleControl1.Text = text1.value;
}

</script>
?-

<input type="text" id="text1">
<input type="button" value="Change Text" onclick="ChangeText()">


若要获取对控件的编程访问,可以针对该控件编写脚本。将该页上的按钮和文本框与简单 JScript 函数 ChangeText 一起使用来设置控件的 text 属性。下面是此示例的完整 HTML 和脚本代码。

<html>

<script language="JScript">

function ChangeText() {
simpleControl1.Text = text1.value;
}

</script>

<body>

<p>Simple Control
<br>
<br>
</body>

<object id="simpleControl1"

classid="http:SimpleControl.dll#Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl"
height="300" width="300" VIEWASTEXT>
<param name="Text" value="Simple Control">
</object>

<br>
<br>

<input type="text" id="text1">
<input type="button" value="Change Text" onclick="ChangeText()">

</html>

创建虚拟目录并设置权限
该 HTML 页必须驻留在 Web 服务器上的 IIS 虚拟目录中,而且必须具有相应的权限。在此示例中,Windows 窗体控件驻留在同一目录中,但它也可以安装到全局程序集缓存中。虚拟目录上的执行权限必须设置为 scripts,如果执行权限设置为 scripts & executables,则将无法正确激活该控件。对于此示例,已经为您执行了这些步骤。


运行该控件
若要运行该控件,只需将 Internet Explorer 指向虚拟目录中的该 HTML 页。如果该控件没有正确激活,可能需要重新启动 Internet Explorer。

///////////////////////////////////////////////////////////////////////////////

//引用结束

自从我上次看了MSDN的WebExc活动上小陈在webcast_asp.net_2(也就是asp.net技巧2)里演示的在网页里放上window程序的所谓Smart Client(不知道有没有单词写错了),我就老是睡不着觉。怎么型呢?
而且老是重复的看小陈打开的那两个原代码的图片:

那,小陈的这个代码跟上面引用的那个文章里的:
<object id="simpleControl1"
classid="http:SimpleControl.dll#Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl"
height="300" width="300" VIEWASTEXT>
<param name="Text" value="Simple Control">
</object>
可以说是一样的。

以前,我并没有十分注意的去看window forms快速入门的文章。我记得我以前是看过那些的文章。但是我一直都是开发B/S为主,所以就算是看了也因为没有应用起来而忘了。//话外

于是我按照快速入门的示例代码完全一样的做了一个。
成功了!
心里感觉特别的兴奋,就算是半夜了我也要继续搞下去。

我就自己开始做了……
我第一个放上去的是,把一个正常情况写出来的窗体。
显示不出来,我晕了。为什么显示不出来啊。我也是按上面的意思做的啊!
我又把自己的代码看了好几遍,没错的,可就是没戏。
//我后来的摸索才发现,窗体是不能放上去的,而只能放控件
请再参考一下上小陈上次演示的程序图片:



这个图片中(左为web上的,左为window),你会发现小程演示时的window窗体跟web上那个有一点点不一样:就是winow上多了一个“Game”菜单。
所以它是一个窗体文件(控件上不能放MainMenu控件)。而不是控件。而菜单下面的那个就是了。所以它才能被分离出来放在web上(放在web上的应该是用户控件或是自定义控件)。
我原先以为,小陈那个.exe文件放上去。是一个应用程序的Main()函数起动的。
我再说一次窗体文件是不能放上去的。或说所有继承自