且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件

更新时间:2022-08-12 17:30:30

    看到这个题目相信有很多人都会说:“这个还用说,早会了!”
      没错,无可否认有很多人肯定都知道了。然而最近突然有人问我,说他在网上查找了半天不是没有找到合适的文章就是找到的文章不是很清楚。于是我想就此问题的解决发表到我的博客中,让更多的人能够清楚实现方法。
      因为主要是窗体回调问题,所以就不过多阐述了,给出详细的代码应该就可以理解了。

      我们这里假设已经存在了两个窗体分别为:FormFather(父窗体)和FormChild(子窗体),而父窗体中有一个名为Btn_OpenChild的按钮,用来打开子窗体,子窗体中也有个名为Btn_IsTrue按钮和一个TextBox控件。当TextBox控件中输入“True”时,父窗体的Btn_OpenChild可用,并关闭子窗体,当输入其它任何字符或字符串父窗体的Btn_OpenChild都不可用而不关闭子窗体,当然刚启动程序时的父窗体的Btn_OpenChild按钮是可用的。下面是实现的代码:
 1VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件//下面是主窗体的代码
 2VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System;
 3VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Collections.Generic;
 4VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.ComponentModel;
 5VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Data;
 6VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Drawing;
 7VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Text;
 8VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Windows.Forms;
 9VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件
10VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件namespace MDIFormDemo
11VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件{
12VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件    public partial class FormFather : Form
13VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件    {
14VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        public FormFather()
15VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        {
16VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            InitializeComponent();
17VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        }

18VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件
19VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        private void OpenChild()//在MDI父窗体中显示子窗体
20VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        {
21VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            foreach (Form f in this.MdiChildren)
22VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            {
23VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件                if ((f) is FormChild)
24VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件                {
25VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件                    f.Activate();
26VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件                    return;
27VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件                }

28VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            }

29VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            FormChild frm = new FormChild(this);
30VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            frm.MdiParent = this;
31VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            frm.Show();
32VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        }

33VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件
34VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        private void FormFather_Load(object sender, EventArgs e)
35VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        {
36VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            OpenChild();//父窗体被打开时,子窗体也同时被打开
37VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        }

38VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        private void Btn_OpenChild_Click(object sender, EventArgs e)
39VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        {
40VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            OpenChild();//如果Btn_OpenChild可用,则点击此按钮也能打开子窗体
41VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        }

42VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件}
主窗体中没有什么特别的,只是注意第29行的代码中的“this”,接合子窗体的代码你就能明白为何要加上这个“this”了(平时只为了打开子窗体时,我们都不会需要在括号中输入“this”)。
//下面是子窗体的代码 
1
VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System;
 2VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Collections.Generic;
 3VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.ComponentModel;
 4VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Data;
 5VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Drawing;
 6VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Text;
 7VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件using System.Windows.Forms;
 8VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件
 9VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件namespace MDIFormDemo
10VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件{
11VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件    public partial class FormChild : Form
12VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件    {
13VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        private FormFather MyForm;
14VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        public FormChild (FormFather f)
15VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        {
16VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            InitializeComponent();
17VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件            MyForm = f;
18VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        }

19VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件
20VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        private void FormChild_Load(object sender, EventArgs e)
21VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        {
22VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件
23VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        }

24VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件
25VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        private void Btn_IsTrue_Click(object sender, EventArgs e)
26VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        {
27VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件             if (this.textBox1.text == "True")
28VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件             {
29VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件                   MyForm.Btn_OpenChild.Enabled = true;
30VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件                  this.Close();
31VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件             }

32VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件             else
33VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件             {
34VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件                  MyForm.Btn_OpenChild.Enabled = false;
35VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件             }

36VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件        }

37VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件}
主窗体的按钮能用暂且不说,你先在子窗体的TextBox控件中输入一个非“True”的字符或字符串,此时你看看主窗体的Btn_OpenChild是否变成灰色的不可用的状态了呢?

以上代码运行环境为VS.NET2005,本人在此下面运行通过,你不妨建立一个MDIFormDemo工程试验一下。



本文转自刚刚博客园博客,原文链接:http://www.cnblogs.com/lijigang/archive/2007/01/14/619878.html,如需转载请自行联系原作者