vs2005 C# 主窗体和子窗体之间控件相互调用

转载 2011年09月26日 15:28:55
 
最近工作用到了C#开发Form应用程序,其中用到了主窗体和子窗体之间控件的相互调用。查了一些资料,现在根据自己写的一个小示例总结如下。
1.主窗体中调用子窗体控件
在主窗体中调用子窗体的控件很简单,只要在主窗体中创建子窗体的时候保留所创建的子窗体对象即可。
2.子窗体中调用主窗体控件
方法如下:
(1)   在主窗体类中定义一个静态数据成员,来保存当前主窗体对象,如下:
   public static MainForm pMainWin = null;
(2)   然后在主窗体构造函数中,给上述静态成员初始化,如下:
       public MainForm()
         {
            InitializeComponent();
            pMainWin = this;//这里是初始化
    }
(3)   在子窗体中调用主窗体,可以通过如下方式:主窗体类名.pMainWin”,例如:
   this.Text_S3.Text = MainForm.pMainWin.Text_M1.Text;
this.Text_S4.Text = MainForm.pMainWin.Text_M4.Text;
3.以上所做的,只是让你能够访问当前主窗体对象或子窗体对象,如果想操作控件,可以直接修改控件的成员访问符,即可以把”private”修改成”public”。当然最好的还是可以用增加公有属性的做法,这样不会破坏类本身的封装。如下:
public string Text_Box
        {
            get {return Text_S2.Text;}
            set { Text_S2.Text = value; }
        }
4.现在把一个小示例的代码粘贴如下:
(1)建立主窗体,添加四个文本框控件:Text_M1,Text_M4,用来主窗体中输入数据传给子窗体;Text_M2,Text_M3,用来显示子窗体中传过来的数据。一个按钮Btn_M1用来调用子窗体。Btn_M1按钮事件中添加代码,现把主窗体代码显示如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace MainSubControl
{
    public partial class MainForm : Form
    {
        //在主窗口类中定义一个静态成员,来保存当前主窗体对象,以便子窗体中调用其控件
        //子窗体调用时,通过"主窗体类名.pMinWin",然后在其构造函数中,给静态成员初始化.
        public static MainForm pMainWin = null;
 
 
        public MainForm()
        {
            InitializeComponent();
            pMainWin = this;
        }
 
        private void Btn_M1_Click(object sender, EventArgs e)
        {
            SubForm SubFormE = new SubForm();
 
            //由于下面要调用到子窗体SubFormE的Text_S1控件,所以需要把Text_S1控件的成员访问符号由private改成public即可.
            //调用子窗体SubFormE的Text_S2控件是通过增加了一个public属性来调用的,不是修改访问修饰符号,当然也可以这么做
            //也可以通过增加public方法来实现.
            if (SubFormE.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.Text_M2.Text = SubFormE.Text_S1.Text;
                this.Text_M3.Text = SubFormE.Text_Box;
                return;
            }
            return;
        }
 
        private void Btn_MExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
 
        }
    }
}
(2)建立子窗体,添加四个文本框:Text_S1,Text_S2,用来子窗体输入数据传给主窗体来显示;Text_S3,Text_S4,用来显示主窗体传过来的数据。一个确定按钮Btn_SOK。先把子窗体类代码显示如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace MainSubControl
{
    public partial class SubForm : Form
    {
        //在子窗体中定义一个主窗体类的一个私有成员,来保存当前主窗体对象.
        //为其构造函数增加一个主窗口的参数来初始化,子窗体中调用,用"this.pParentWin"
        //18private MainForm pParentWin = null;
 
 
        public SubForm()
        {
            InitializeComponent();
            //18pParentWin = WinMain;
        }
 
        public string Text_Box
        {
            get {return Text_S2.Text;}
            set { Text_S2.Text = value; }
        }
 
 
        private void SubForm_Load(object sender, EventArgs e)
        {
            this.Text_S3.Text = MainForm.pMainWin.Text_M1.Text;
            //18this.Text_S4.Text = this.pParentWin.Text_M4.Text;
            this.Text_S4.Text = MainForm.pMainWin.Text_M4.Text;
        }
 
      
        private void Btn_SOK_Click(object sender, EventArgs e)
        {
          
        }
      
    }
}
呵呵,结束了,希望对大家有帮助。

WIN32多线程程序设计学习笔记(第三章)

WIN32多线程程序设计学习笔记(第三章) 通过在上一章的学习,我学会使用GetExitCodeThread()这个函数来判断一个线程是否还在执行。通过这个函数,我就可以对付“某个线程必须在某个线程结...
  • chinani
  • chinani
  • 2004-03-29 10:41:00
  • 2057

C#主窗体和子窗体之间如何相互操作对方的控件

原文地址:http://blog.csdn.net/knight94/archive/2006/03/18/628285.aspx很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗...
  • ltolll
  • ltolll
  • 2006-09-04 15:44:00
  • 2793

主窗体和子窗体之间如何相互操作对方的控件

 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目前常...
  • yumanqing
  • yumanqing
  • 2006-10-23 10:41:00
  • 2894

C# WinForm 在父窗体与子窗体之间互相调用变量或方法

【父窗体调用子窗体变量或方法】:         首先在父窗体下定义子窗体,如:SubForm subform1=new SubForm();         再将子窗体subform1中需要调用的变...
  • momojiang5
  • momojiang5
  • 2015-12-23 10:04:23
  • 4877

MDI父窗体和子窗体之间怎么传值?

主要的思想就是,通过成员变量和
  • yaoxingnihao
  • yaoxingnihao
  • 2014-07-19 21:12:14
  • 434

C# 窗体之间的控件调用

  • 2013年08月10日 22:54
  • 63KB
  • 下载

C#子窗体调用主窗体中事件

很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目...
  • ycs34082419900527
  • ycs34082419900527
  • 2015-07-16 22:33:11
  • 1360

c#-WinFrom子窗体嵌入主窗体

示例添加嵌入按钮事件代码复用OOP原则解决多个按钮快速编写窗体嵌入 符合面向对象编程方法 独立出打开窗体的方法: //打开窗体方法 private void OpenFrom(...
  • qq_36482772
  • qq_36482772
  • 2017-08-22 03:10:42
  • 1254

Access子窗体引用父窗体的控件

private sub 子窗体函数()      me.子窗体控件1=Forms!F_主窗体.[主窗体控件1]End sub ...
  • zhoushengchao
  • zhoushengchao
  • 2008-03-11 19:15:00
  • 5352

C#子窗口与父窗口交互(使用委托和事件)

目标:在子窗口Form2上单击按钮时向Form1传递一组自定义参数,并显示在父窗口Form1上。 方法:有很多方法,这里只介绍委托和事件的实现方式。 思路:Form2中定义事件,Form1...
  • white__cat
  • white__cat
  • 2014-11-10 11:02:30
  • 2438
收藏助手
不良信息举报
您举报文章:vs2005 C# 主窗体和子窗体之间控件相互调用
举报原因:
原因补充:

(最多只允许输入30个字)