正文

WEBFORM与WINFORM的交互问题(收集)2006-08-10 11:45:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/Csharpsky/17444.html

分享到:

      其实我这个问题本身就提得有些模糊.你想知道的是两个工程之间的交互还是,在IE中使用winform控件,或是在winform中访问IE呢?       http://www.66study.com/Article/web/net/VB/200506/50514.html       http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx(应用了WebBrowser控件)       http://www.tldown.com/article/article_14859_1.html       http://blog.joycode.com/lostinet/archive/2004/06/04/23638.aspx   结合 MSHTML 与 WebBrowser 生成美观实用的 WinForm 应用程序。 我用WinForm开发也有一段时间了。我觉得目前的WinForm开发速度是够的,但是一些原本在HTML就很容易做到的事情,在WinForm中就很难实现了。 这个主要的原因可能是WinForm复用控件的能力非常强,但是可用的控件却非常少。一般买回来的控件不但贵,而且也不是太好扩展。作为一个学了多年HTML的人,我当然希望在WinForm中依然能使用HTML的特征,例如强大的CSS!,自动排版伸缩的特征,(CSS与排版可以更方便打印!),以及脚本的编写。(有时候写脚本比写WinForm的程序更爽。具体情况具体做)。要做这个其实不难。但是要灵活运用则不容易了。通常,使用WebBrowser控件的人,只是简单地使用MSHTML调用WebBrowser里的东西。也就是说,这个调用是单项的,只考虑到修改HTML来显示某种东西。今天我写这个随笔的意图是告诉大家怎样把用户在WebBrowser里的操作反馈给WinForm 。做这个反馈的基石是 DotNet 的 InteropServices 。通过把DotNet的某个对象,传到HTML DOM里去,然后用脚本来操作该DotNet对象。要做到这个,核心是:  获取 WebBrowser.Document ,它实现了mshtml.IHtmlDocument /2/3/4/5   (其中IHtmlDocument2最有用)   这个Document是   System.Runtime.InteropServices.Expando.IExpando,通过它来设置和获取Document的一些动态命名的成员。例子中的代码是:mshtml.IHTMLDocument2 doc2=(mshtml.IHTMLDocument2)browser.Document;System.Runtime.InteropServices.Expando.IExpando ex=(System.Runtime.InteropServices.Expando.IExpando)doc2;System.Reflection.PropertyInfo piform1=ex.AddProperty("Form1");piform1.SetValue(doc2,this,null);//从此,在HTML的document.Form1就是这个WinForm的Control了。你可以用脚本来调用Form1 !有了这些交互,我们可以实现的东西实在太多太多了。我做了一个简单的例子,在这里下载 http://www.lostinet.com/files/WinHtml.zip我下一步应该是研究一下,怎样直接把WinForm的Control动态地嵌进这个HTML里。(不是用 《 OBJECT 》来部署的形式)  2004年6月4日 11:26 反馈# 回复: 结合 MSHTML 与 WebBrowser 生成美观实用的 WinForm 应用程序。 2004-6-4 12:50 Lostinet 例子中的window的获取是多余了. 因为我发现了 IHTMLDocument2.parentWindow 请问可否在webform和winform之间传递数据和命令 .NET技术 / ASP.NET - CSDN社区 community.csdn.net             请问可否在webform和winform之间传递数据和命令xmouse ()  2003-07-24 14:05:42 在.NET技术/ASP.NET提问小弟想在asp.net和vc vb写的windows应用程序之间传递数据和命令 把asp.net做的web页面放在用winform中作为用户界面 请问各位 能不能把页面上的用户输入传到应用程序中去 并且对程序发出命令 最好程序也可以对页面发送命令 更新处理后的显示结果   Top3楼 atian25 (阿天)  回复于2003-07-24 14:27:57 得分 0 你是在winform里面镶入webbrowser吗 To atian25(阿天) : 有此打算,我想嵌入web不是什么问题,交换数据发送命令比较难解决,如果后者不能实现,嵌入的问题我也不必考虑了。 Top6楼 xmouse ()  回复于2003-07-24 15:08:57 得分 0 因为程序还需要放在web上做服务,所以想使用web做用户输入界面,然后由winform来处理,并且返回给web Top8楼 atian25 (阿天)  回复于2003-07-24 16:17:14 得分75 文章标题:DotNet Form间数据传递 cancersyf aspxcn.com 2002-09-02 1. WebForm l 利用System.Web Namespace 中 HttpResponse Class的Redirect方法传递,HttpRequest Class的 QueryString方法接收 传递来源类webform1 中的某个方法里 使用 Response.Redirect ("WebForm2.aspx?s=1&ss=11"); //HttpResponse 类的方法和属性通过 ASP.NET 的内部 Response 对象公开。 //所以Response可以使用前者的方法 传递目标类webform2 中 private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 int loop1; NameValueCollection coll;   //Load Form variables into NameValueCollection variable. coll=Request.QueryString ; //HttpRequest 类的方法和属性通过 ASP.NET 的内部 Request 对象公开。 // Get names of all forms into a string array. String[] arr1 = coll.AllKeys; for (loop1 = 0; loop1 < arr1.Length; loop1++) { Response.Write(arr1[loop1] + " = " + coll.GetValues(arr1[loop1]).GetValue (0) +""); }   } //这样就列举了从webform1传递来的s & ss的值     l 这里要解释一下服务器端控件 , (我觉得)在asp.Net中它只是其他服务器端控件的容器,不能再像原来的asp那样可以使用action属性向其他页面提交数据。下面是MSDN原文:   ms-help://MS.VSCC/MS.MSDNVS.2052/cpgenref/html/cpconhtmlformcontrol.htm   注意 action 属性总是设置为页本身的 URL。无法更改 action 属性;因此,只能向页本身回送。   2. WindowsForm l 利用form构造函数 Form()传递值. Form Class 可以拥有多个构造函数,可以添加一个用来传值的构造函数,如下 public Form2() { // // Windows 窗体设计器支持所必需的 // InitializeComponent();   // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // }   public Form2(int iii ) { // // Windows 窗体设计器支持所必需的 // InitializeComponent();   //这里添加一个label以显示传来的值 this.label1.Text= iii.ToString (); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // }   在打开form2的form1的某个方法里如下使用,可以把123传给form2 //WindowsApplication1是我的工程名   WindowsApplication1.Form2 frm2 = new WindowsApplication1.Form2(123); frm2.Show ();   l 利用类的属性传值。 传递目标类form2 如下声明 private int i2 ;   public int iLen { get{return i2;} set{i2=value;} } //这里添加一个label以显示传来的值 private void Form2_Load(object sender, System.EventArgs e) { this.label1.Text = this.i2.ToString (); }   传递来源类form1如下使用   WindowsApplication1.Form2 frm2 = new WindowsApplication1.Form2 (); frm2.iLen =1234; frm2.Show ();   Top9楼 zwztu (做自己想做的事)  回复于2003-07-24 16:34:15 得分5 为什么要传到winform中处理?直接在后台cs代码中处理不行吗? Top11楼 xmouse ()  回复于2003-07-25 16:08:56 得分 0 To zwztu(做自己想做的事:一来程序原来就是在winform写成的,后来想放到服务器上;再有,因为程序要进行大量数值运算,用webform直接写计算代码未必能胜任,而且我对webform的编程也不了解。 Top12楼 xmouse ()  回复于2003-07-25 16:11:53 得分 0 既然交换数据是可以解决的,回头再问原先的问题,马上就给分:把webform放到winform中去什么方法比较合适? Top15楼 xmouse ()  回复于2003-07-26 09:39:00 得分 0 To atian25(阿天) :多谢多谢,我现在用MSW eb Browser控件和DOM可以访问web中的每一个元素了,通过调用Navigate方法可以实现对web发送命令;可是反过来如何通过web对winform发送命令和获取数据我还是没明白,你的上面的代码好像是在winfrom和winform之间和传递的阿,还望指点! Top16楼 atian25 (阿天)  回复于2003-07-26 10:36:56 得分 0 你的web是镶入在win里面的吧? 对winform不是很熟 我最近那个项目我上面说了,通过webservies,如果想web控制win,通过web修改webservies,然后win读取。不知道这样是否满足你的要求 你想怎样个web控制win呢 Top17楼 xmouse ()  回复于2003-07-26 11:49:35 得分 0 web是嵌入到win的,用的是AxWebBrowser控件,我是想当用户在web中按钮可以引发win中的方法/函数/事件,就是这样的要求。 还有,我不清楚你说的通过web修改webservies的方法 大概是如何实现的阿 Top19楼 atian25 (阿天)  回复于2003-07-28 13:20:32 得分 0 不好意思,昨天没看到帖子已经回了 好象为了安全,M$不让你的webform控制winform,用createobject也许能控制 先在webform里面创建一个你winform对象,然后控制吧(好象有点浪费资源) 或者把你winform中的需要被控制的部分写成控件 我说的有点不清楚,我的意思是webform中的asp.net可以通过webservies来修改一些 参数,然后用你的winform定时去读取,但这样的可行性我不知道好不好 我们那个是修改后台数据库。      

阅读(7421) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册