例如:
Public frm As New Form1
frm.Show()
因为Form1在这里是一个类,而不是一个对象。我们定义了一个Form1类的对象frm,通过new方法将其实例化,并且显示它。有时候初学者会使用:
Public frm As Form
这样在使用frm的成员时会提示,没有实例化的错误。New方法就是新建一个Form1的实例。如果不使用New方法,则需要通过其它的手段将已经创建的Form1实例的句柄传给frm对象。这样做的好处是,我们可以见了很多个Form1的对象,在程序中作为一个通用的Form,当然也可以只用一个。这时候很多人可以自然而然的去使用Form1的公共成员。但是有时候需要在Form1种使用Form2的成员,这就要考虑到两个Form关系的问题。下面具一个例子:
在MFC的MDI类型的工程中,我们知道会有MainFrm和ChildFrm的概念。现在用一个。NET的Winform工程举例。主框架是一个MainFrm(将其设为一个MDI容器),包含了frmHome,frmReport,frmOption等子窗体。程序开始时候,我们需要将frmHome等加载到MainFrm中。然后根据不同的消息显示不同的子窗体。而且这些子窗体之间的成员也需要互相调用。这时候我们就该在MainFrm中定义几个public的成员frmHome,frmReport,frmOption等。
Public frmHome As New frmHome
Public frmReport As New frmReport
Public frmOption As New frmOption
Private Sub MainFrm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
frmHome.MdiParent = Me
frmHome.Show()
frmHome.Dock = DockStyle.Fill
End Sub
现在我们在frmReport中想要调用frmHome的成员,从下图这个结构中,我们就可以想到通过MainFrm来作为桥梁。可以在每个子窗体上定义一个主框架的对象,也可以定义一个全局变量用来保存MainFrm的句柄。
如果在子窗体上定义一个MainFrm的对象,我们需要把已经创建好的程序主框架的句柄传给这个对象:
Dim pMainfrm As MainFrm
pMainfrm = CType(Me.MdiParent, MainFrm)
这样我们就可以使用pMainFrm.frmHome的成员变量了。这有点类似在MFC的MDI中常用的定义一个pMainFrm的指针用来寻找主框架。
CMainFrame* pMainFrm = (CMainFrame*)GetTopLevelFrame();
CMainFrame* pMainFrm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
如果仅仅是两个窗体之间的调用,也是可以使用的。只要知道两个Form之间的关系,通常都是Child,Parent,Owner之类的关系。例如:
Dim frm As Form1
frm = CType(Me.Owner, Form1)
分享到:
相关推荐
尽管它们各自有着独特的特性和优势,但在实际项目中,开发者有时需要将两者结合,实现Winform窗体与WPF窗体的互相调用。这可以是因为团队已经有一部分基于Winform的应用,而新功能或界面设计则更适合WPF,或者是为了...
本文将深入探讨如何在C#(后端)与JavaScript(前端)之间进行变量和函数的互相调用,这是一项对于实现动态网页功能至关重要的技能。 ### C#与JavaScript之间的交互 #### 一、C#向JavaScript传递数据 首先,让...
在VB.NET中实现MDI窗体,首先需要设置一个窗体为主MDI窗体(Main MDI Form),然后创建的其他窗体将作为MDI子窗体(MDI Child Forms)。这个例子源码很可能是演示如何自定义和控制MDI窗体的行为,以提供更灵活的用户...
例如,当用户点击“搜索设备”按钮时,会触发`Form2`类中的相应事件处理函数,调用`UPNPCls`类的方法来查找并显示网络上的UPNP设备。 4. **资源管理**:`Form2.resx`文件存储了窗体的本地化资源,如控件的文本、...
XiliumCefGlue是一个基于Chromium Embedded Framework (CEF)的.NET绑定库,它允许我们在C#项目中嵌入一个浏览器引擎,并实现JavaScript与C#代码之间的双向通信。 首先,让我们详细了解一下XiliumCefGlue的初始化...
(2)IronPython是.NET版的Python编译器方案,可以充分结合Python脚本优势和.NET平台类库,互相调用,实现丰富功能。 本工具提供一个python和C#动态支持的框架(内置对象为Ipy_this): (a) Scripts目录下含多个...
(2)IronPython是.NET版的Python编译器方案,可以充分结合Python脚本优势和.NET平台类库,互相调用,实现丰富功能。 本工具提供一个python和C#动态支持的框架(内置对象为Ipy_this): (a) Scripts目录下含多个...
在.NET框架中,C#与JavaScript之间的交互是通过WebBrowser控件实现的,这主要应用于桌面应用程序中嵌入网页并需要与网页中的脚本进行通信的场景。在本文中,我们将探讨如何设置WebBrowser控件以实现C#与JavaScript的...
提供跨应用程序域通信的能力,允许对象在不同进程中互相调用。 12. 进程与线程: - 进程是系统分配资源的基本单位,包含多个线程。 - 线程是程序执行的最小单位,共享进程的资源。 13. 堆与栈的区别: - 栈:...
在这个“在窗体上实现两进度条互相关联的C#例子”中,我们将深入理解如何通过编程逻辑来控制这两个进度条的交互。 首先,我们需要创建一个新的Windows Forms项目。在Visual Studio中,选择“文件” -> “新建” -> ...
在动态窗体通信中,委托是连接不同窗体之间的桥梁,使得它们可以互相调用方法、传递数据。 首先,我们来看看主窗体(Main Form)和新窗体(New Form)之间的通信。假设主窗体创建了新窗体,并希望在新窗体完成某些...
在C#中,Windows Forms(WinForm)是.NET框架提供的用于构建桌面应用程序的库。窗口通常由`Form`类表示,每个`Form`实例代表一个独立的窗口。要实现窗口切换,我们需要管理多个`Form`对象,并在适当的时候显示或隐藏...
在.NET框架中,Windows Presentation Foundation (WPF)和Windows Forms (WinForms) 是两种不同的UI技术,但它们可以互相交互。本篇文章将详细介绍如何利用WPF调用WinForms类库来实现屏幕截图功能,包括全屏截取、...
6. .NET中的CLS(Common Language Specification)是为不同编程语言之间的互操作性制定的一套规则,确保不同语言编译的代码可以互相调用。 7. 字符数组并不强制要求最后一个字符为'\0',但在C/C++等语言中,通常用'...
本教程将聚焦于"C# drawing 绘制曲线"这一主题,探讨如何在C#环境中利用GDI+(Graphics Device Interface Plus)库进行曲线绘制,并涉及多窗口与单窗口之间的切换。我们将深入学习以下几个关键知识点: 1. **GDI+...
在C#中,我们可以使用System.Net.Sockets命名空间中的TcpClient和TcpListener类来实现TCP通信。TcpClient代表客户端,用于连接到服务器;TcpListener则代表服务器,等待客户端的连接请求。以下是对两个项目WFServer...
11. 命令文件调用菜单:在Visual FoxPro中,调用菜单的命令是DO。 12. Word选中段落:在Word中,快速选中一段文字的技巧是在段内任意位置连续单击三次。 13. 类的可访问性:类的可访问性确实影响其成员的可访问性...
为了实现这一功能,我们可以创建一个辅助类,包含静态方法来处理屏幕内容交换,或者在每个窗体中添加此类方法并互相调用。在`WindowsFormsApplication2`项目中,可能会有一个或多个窗体类,这些类应该扩展`Form`基类...
本实例主要讲解了如何在Java中实现URL与UTF-8编码之间的互相转换。 1. **URL编码原理** URL编码是按照`application/x-www-form-urlencoded`格式进行的,其中非字母数字字符会被替换为百分号`%`加上两个十六进制的...