做毕业设计的时候有一个功能就是修改学生信息,这个功能在win form里实现的。主体系统在web application中搭建的web页面,想在主页上显示win form窗体,直接用是不能调用的,把win form的窗体文件放入web应用里显示生成错误,如果用添加的方式把form引入项目再调用,不会发生生成错误,但是运行时跳转会显示html错误。有什么方法可以在web中打开或者嵌套显示win form吗,网上修改注册表的方式,代码的路径不太懂,就没法用这种方法。或者可以教教我注册表添加进行调用的代码是怎么理解吗。谢谢!
额,我不想打击你。但是连flash,java applet都消亡的2023年,你就不要指望那些2007年的文章能帮助你了
主流浏览器在不遗余力的干掉com,Activex,applet,所以那些文章在目前的主流浏览器上都用不了。
非要“嵌入”目前的方案是webassembly,net下的表现是 Blazor
但是么你肯定不想重新写,你要想从新写,一个修改学生信息的html5 表单页面也花不了1天。
在Web应用中嵌入WinForm窗体有几种常见方法:
在WinForm中添加WebBrowser控件,然后加载Web应用的URL,这可以在WinForm中显示Web内容。这种方式易于实现,但是会有跨域限制,WinForm的代码无法直接操作WebBrowser中加载的Web应用。
CefSharp是一个开源项目,可以在WinForm中嵌入Chromium内核,从而显示Web内容。这种方式没有跨域限制,WinForm可以通过CefSharp与嵌入的Chromium内核交互。这是比较理想的方案,但是实现起来较复杂。
可以将WinForm项目编译为DLL,然后由Web应用加载这个DLL,并通过反射调用其中的窗体和方法。这种方式实现起来也比较复杂,且可能有DLL版本兼容性问题。
可以将WinForm编译为COM组件,注册到系统,然后由Web应用通过COM调用来显示WinForm窗体。这也是一个较复杂的实现方式,要求熟悉COM组件的开发和调用。
所以,总体来说,使用WinForm嵌入WebBrowser控件是最简单的方式。如果要在Web应用中显示WinForm而没有跨域限制,使用CefSharp是比较理想的方案。
在Web中嵌入WinForm,需要在两个项目之间建立通信机制。主要有:
客户端JavaScript直接调用服务器端的Web API与WinForm交互。这需要Web API项目引用WinForm项目。
使用 SignalR 等技术在两项目之间建立实时通信机制。
让WinForm项目本身托管在IIS等Web服务器上,由Web应用直接调用WinForm项目的Web API与之交互。
我理解你主要是想在Web页面上显示WinForm窗体对学生信息进行修改。那么推荐的方案是:
在WinForm项目中添加WebBrowser控件,加载Web应用URL
在Web应用中添加修改学生信息的Web API
在WinForm中调用WebBrowser的JavaScript执行环境,调用Web API进行学生信息修改
在Web API中完成学生信息修改的业务逻辑,并返回结果到WinForm
WinForm收到结果后更新UI
这样既可以在Web应用中显示WinForm窗体,又可以实现两项目之间的交互,完成学生信息的修改功能。
希望这个总结能对你有所帮助。
逻辑有点不一样,还是不要折腾吧,用web页面改写一下吧。
根据GPT和自我理解,仅供参考:
在 Web 应用程序中嵌套 Windows Forms 应用程序可以通过以下步骤实现:
1、在 Web 应用程序中创建一个 Windows Forms 应用程序项目。
2、将 Windows Forms 应用程序项目添加到 Web 应用程序中。可以通过右键单击 Web 应用程序项目,选择“添加”>“Windows 窗体”来完成此操作。
3、将 Windows Forms 应用程序项目的文件添加到 Web 应用程序中。可以通过右键单击 Windows Forms 应用程序项目,选择“添加”>“文件”来完成此操作。
4、在 Windows Forms 应用程序项目中编写代码,以便在 Web 应用程序中显示窗体。
5、运行应用程序并在浏览器中查看窗体。
在上述步骤中,需要注意以下几点:
1、将 Windows Forms 应用程序项目添加到 Web 应用程序中时,需要将项目的 DLL 文件一同添加。可以在项目属性中找到此选项。
2、将 Windows Forms 应用程序项目的文件添加到 Web 应用程序中时,需要将项目的 EXE 文件一同添加。可以在项目属性中找到此选项。
3、在 Windows Forms 应用程序项目中编写代码时,需要使用 Web 应用程序提供的 API 来访问窗体。可以在 Windows Forms 应用程序项目中使用 Web 应用程序提供的 API 来创建窗体,并使用 Web 应用程序提供的 API 来访问窗体。
4、在运行应用程序时,需要在浏览器中查看窗体。可以在浏览器中打开 Web 应用程序,并查看窗体。
总之,将 Windows Forms 应用程序项目添加到 Web 应用程序中并在 Web 应用程序中显示窗体可以通过以上步骤实现。需要注意的是,需要在 Windows Forms 应用程序项目中使用 Web 应用程序提供的 API 来访问窗体,并使用 Web 应用程序提供的 API 来创建窗体。
引用chatGPT作答,在C#中,要在web页面中嵌套WinForm窗体,可以使用ActiveX控件来实现。具体步骤如下:
1.在WinForm应用程序中添加COM互操作性组件,以便该应用程序可以被web页面中的ActiveX控件调用。
2.在WinForm应用程序中创建一个公开的类,该类包含需要嵌套的窗体,并将该类标记为COM可见。
3.将WinForm应用程序编译为可注册的COM组件,并将其安装在web服务器上。
4.在web页面中添加一个ActiveX控件,将其ClassID属性设置为WinForm应用程序的ClassID,并使用JavaScript代码在web页面中创建该控件的实例。
5.通过JavaScript代码,将web页面中的ActiveX控件与WinForm应用程序中的公开类进行交互,从而实现在web页面中嵌套WinForm窗体的效果。
该回答引用ChatGPT
[ComVisible(true)]
public class WinFormCaller
{
private Form _frm;
public WinFormCaller()
{
_frm = new MyWinForm(); // MyWinForm是要调用的Win Form
}
public void ShowForm()
{
_frm.ShowDialog();
}
}
WinFormCaller caller = new WinFormCaller();
Type type = caller.GetType();
// 生成COM对象并注册
RegistrationServices regsrv = new RegistrationServices();
bool bResult = regsrv.RegisterAssembly(type.Assembly, AssemblyRegistrationFlags.SetCodeBase);
<object id="winform" classid="clsid:XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" width="400" height="300"></object>
<script type="text/javascript">
function showForm() {
winform.ShowForm();
}
</script>
<button onclick="showForm()">Open Win Form</button>