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

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

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

18
19        private void OpenChild()//在MDI父窗体中显示子窗体
20        {
21            foreach (Form f in this.MdiChildren)
22            {
23                if ((f) is FormChild)
24                {
25                    f.Activate();
26                    return;
27                }

28            }

29            FormChild frm = new FormChild(this);
30            frm.MdiParent = this;
31            frm.Show();
32        }

33
34        private void FormFather_Load(object sender, EventArgs e)
35        {
36            OpenChild();//父窗体被打开时,子窗体也同时被打开
37        }

38        private void Btn_OpenChild_Click(object sender, EventArgs e)
39        {
40            OpenChild();//如果Btn_OpenChild可用,则点击此按钮也能打开子窗体
41        }

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

19
20        private void FormChild_Load(object sender, EventArgs e)
21        {
22
23        }

24
25        private void Btn_IsTrue_Click(object sender, EventArgs e)
26        {
27             if (this.textBox1.text == "True")
28             {
29                   MyForm.Btn_OpenChild.Enabled = true;
30                  this.Close();
31             }

32             else
33             {
34                  MyForm.Btn_OpenChild.Enabled = false;
35             }

36        }

37}

主窗体的按钮能用暂且不说,你先在子窗体的TextBox控件中输入一个非“True”的字符或字符串,此时你看看主窗体的Btn_OpenChild是否变成灰色的不可用的状态了呢?

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

转载说明:

作者:刚刚

原创作品网址:http://www.cnblogs.com/lijigang/archive/2007/01/14/619878.html

郑重声明:

最近“刚刚”本人发现网络中有个别人将此文章当作原创发布在了自己在CSDN等网站上的博客里,现特别说明本文的原创地址与作者为上述“转载说明”,其他网站或个人博客中的原创标识都不足以相信为真的原创含义。

C# Winform MDI窗体,父窗体控件覆盖子窗体的解决办法

问题:MDI窗体中,父窗体控件会覆盖子窗体,网上很多解决方案表面上解决了问题,但失去了MDI窗体的基本特性,并不实用。比较赞成使用子窗体“代替”父窗体控件的方案。思路:不将控件放置在父窗体上,而是放在...
  • lj22377
  • lj22377
  • 2015年09月14日 15:37
  • 2222

C#MDI打开子窗体去掉自动生成的菜单栏

C#在DMI中打开子窗体时自动生成了菜单栏,怎么去掉菜单栏呢呢? 先在父窗体的加载事件中打开子窗体并使它最大化 private void MDIParent1_Load(object send...
  • shiyangkai
  • shiyangkai
  • 2017年05月09日 16:00
  • 820

VB.NET章鱼哥出品—如何解决MDI子窗体被父窗体中的控件覆盖的问题

最近有个网友问我这个问题,我就上网搜了下,结果很失望,有几个在CSDN上发的求助帖,看到最后都没有找到明确的答案。这里笔者在网上找到了API函数SetParent(),并对网上的错误进行了修改,并给出...
  • zhangyubishoulin
  • zhangyubishoulin
  • 2014年11月06日 06:40
  • 2276

WPF实现类似MDI子窗体的功能

在我的上一篇博客中 http://blog.csdn.net/soft2buy/article/details/5479946,提到了用UserControl做为WPF的“MDI子窗体”。今天偶然发现...
  • soft2buy
  • soft2buy
  • 2013年11月12日 17:06
  • 10812

【C#】MDI窗体中,将子窗体置于父窗体控件之上的方法

问题 这几天在优化程序的时候发现了一个问题,就是在MDI窗体中的子窗体被激活显示出来之后,总是被主窗体中的控件遮挡(各种控件)。解决的方法也试了很多但是都不是很满意,由于C#的WINFROM窗体没...
  • SugaryoTT
  • SugaryoTT
  • 2016年05月08日 16:03
  • 2217

C#解决MDI窗体闪屏的方法 --(arvin推荐)

来自:http://im17me.blog.163.com/blog/static/1378992752012927356432/ 最近从师兄手上接了一个C#的项目,需要用到MDI窗体,可是每当我显...
  • ArvinStudy
  • ArvinStudy
  • 2013年06月26日 23:04
  • 927

创建Tab风格的mdi窗体

创建Tab风格的Mdi窗体 网上存在一些tab风格的mdi窗体的控件可能,但是我的需求比较简单,也没有找到合适易用的控件,由于我只需要...
  • pinebud55
  • pinebud55
  • 2016年08月18日 19:18
  • 997

vb.net详解MDI窗体操作方法

MDI窗体可以避免打开窗体的时候被无数个子窗体困扰,我将为大家一一的介绍一下vb.net中MDI窗体的操作方法 一、如何创建MDI窗体? 1、创建mdi主窗体 新建建立一个默认空白的Window...
  • jin870132690
  • jin870132690
  • 2014年11月29日 16:59
  • 3735

DELPHI中MDI子窗口的关闭 和打开

Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如...
  • wozengcong
  • wozengcong
  • 2015年01月24日 23:26
  • 3480

VB6给MDI窗口(父窗口)动态绘制背景的种种方法

VB6就不说了,要快速写一个程序,.NET(C#)可能还更好更强大,但是要说安全,VB6反到强过他们 有时候两者就是一种矛盾,所以越是用户友好,越是易维护和扩展的程序,越容易被破解. ...
  • prsniper
  • prsniper
  • 2013年08月18日 06:12
  • 2009
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VS.NET开发小技巧——C/S程序中MDI子窗体控制其父窗体控件
举报原因:
原因补充:

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