多个窗体之间如何互相调用

    在VB6中,多个窗体之间可以很方便地互相调用,如:在Form1中,只需要用一条“Form2.Show” 语句就能显示窗体Form2。然而在VB.net中窗体处理机制发生了很大的变化:在访问窗体之前,你必须进行窗体实例化;如果在项目中有多处代码访问同一窗体,则你必须把它的同一实例指针传递给这些代码,否则新创建的窗体实例就不再是原先的窗体了。

    下面的代码实现窗体Form1和Form2之间互相调用,Form1为主窗体。Form1上的按钮BtnShowFrm2的标题为“显示Form2”,Form2上的按钮BtnShowFrm1的标题为“显示Form1”。

    1、Form1中的代码:

Public Class Form1
 Inherits System.<a href="http://dev.21tx.com/os/windows/" target="_blank">Windows</a>.Forms.Form
 '创建Form2的一个新的实例
 Dim Frm2 As New Form2()

 Public Function Instance2(ByVal frm As Form2)
  Frm2 = frm
 End Function

 Private Sub BtnShowFrm2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles BtnShowFrm2.Click
  '以下语句保证在Form2以及其他窗体中访问Form1时,
  '都将得到Form1的同一个窗体实例。
  Frm2.Instance(Me)
  Frm2.Show()
  Me.Hide()
 End Sub

End Class

    2、Form2中的代码:

Public Class Form2
 Inherits System.Windows.Forms.Form
 Dim frm1 As Form1
 '借助一个新增的Instance属性来生成窗体frm1的实例
 Public Function Instance(ByVal frm As Form1)
  frm1 = frm
 End Function

 Private Sub BtnShowFrm1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles BtnShowFrm1.Click
  Me.Hide()
  frm1.Show()
 End Sub

 Private Sub Form2_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
  '如果Form2被关闭,则设置Form1的按钮BtnShowFrm2不可用。
  frm1.BtnShowFrm2.Enabled = False
  frm1.Show()
 End Sub
End Class

时间: 2024-11-29 22:38:13

多个窗体之间如何互相调用的相关文章

c#-Arcengine +C# 中窗体之间调用AO控件的问题

问题描述 Arcengine +C# 中窗体之间调用AO控件的问题 简答的说有两个窗体 想要简单的在Form2中调用Form1的Axmapcontrol1的get_layer() _方法 comboBox1.Items.Add(frm.axMapControl1.get_Layer(i).Name); 我自己的方式是在Form1中把axmapcontrol1的属性设置为public然后在Form2中定义一个Form变量来调用 为什么值始终传不过去 而非AO控件可以这样传值 解决方案 c#中窗体之

C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用)

本文转载:http://www.csframework.com/archive/2/arc-2-20110805-1771.htm 文章侧重点主要是讨论"窗体"与"窗体"之间方法的调用,以及"MDI父窗体"与"Chilid子窗体"之间如何相互的调用方法. C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用) 看似一个简单的功能需求,其实很多初学者处理不好的,很多朋友会这么写: C# Code: //父窗体是是frmPare

c# 控件-C#窗体之间的公共数据问题

问题描述 C#窗体之间的公共数据问题 是这样,我要组一个点餐系统,然后即是说有很多窗体,但是有一个公共类,用于储存其他窗体都会用到的一些东西,但问题是我在一个窗体中修改了这个公共类的一些东西,但是在其他窗体用到这个修改以后的东西以后却显示没有被修改,代码大致如下, 这就是那个公共类 以下是在一个窗体的中的右击菜单中往这个公共类的集合添加数据 下面是在另一个窗体中用到这个集合,结果显示出来却没有数据 还有一个问题就是公共类中有一个manage属性,初始值是user,我管理员登录成功以后修改为Adm

.NET中Form之间的互相调用

.NET中Form之间的互相调用 有了.NET,以前的一些编程思想有了改变.记得在VB6的时代,我们经常会建立几个Form然后直接利用Load方法来调用.到了.NET时代了,VB也引入了类的概念.所以窗体调用的方式也改变了.例如: Public frm As New Form1 frm.Show() 因为Form1在这里是一个类,而不是一个对象.我们定义了一个Form1类的对象frm,通过new方法将其实例化,并且显示它.有时候初学者会使用: Public frm As Form 这样在使用fr

WinForm窗体之间交互介绍

我们在做程序的时候遇到WinForm窗体之间交互的问题,这里把各种方法总结一下,内容比较确基础,适合刚入门的初学者,下面我们就一起来看看吧! 在窗体间传递数据的方法比较多: 1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就明白了: publicclassfrmMain:Form { ... frmControlcontrolForm=newfrmControl(this); c

Asp.net窗体之间传递SqlDataSource数据的问题

问题描述 Asp.net窗体之间传递SqlDataSource数据的问题 我建了2个Webform窗体(Asp.net),一个Webform1一个Webform2.我在Webform1里面有一个SqlDataSource1和一个Button,在Webform2里是一个Textbook和一个Button.请问怎样才能在Webform1里点击Button后跳转到Webform2,并且在Webform2中的Textbook里输入值后点击form2的Button可以把值添加到Webform1里的SqlD

asp.net 的winform中窗体之间跳转如何传值

asp教程.net 的winform中窗体之间跳转如何传值 使用attribute  public partial class form1 : form    {    private void button1_click(object sender, eventargs e)    {    form2 frm2 = new form2();    frm2.show(this);    }    }    public partial class form2 : form    {    p

WinForm窗体之间交互的一些方法(转)

实际上过去我也写过类似的主题,这里把各种方法总结一下,内容的确基础了一些,所以这篇文章是写给刚刚学习C#的同行们的,希望对大家有些帮助吧!很抱歉,这篇文章没有诡异的bug来勾起大家的兴趣,但是下篇文章我会努力写些有趣的主题的!在窗体间传递数据的方法比较多:1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就明白了:   public class frmMain:Form   {  

Javascript showModalDialog两个窗体之间传值_javascript技巧

Javascript 两个窗体之间传值实现代码javascript中还有一个函数window.showModalDialog也可以打开一个新窗体,不过他打开的是一个模态窗口,那么如何在父窗体和子窗体之间传值呢?我们先看该函数的定义:vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) 参数说明: sURL--必选参数,类型:字符串.用来指定对话框要显示的文档的URL. vArguments--可选参数,类型