MDI开发实例

实现功能:在父窗体中有两个菜单:新建和获取内容,点击新建时新建一个子窗体,点击获取内容时获取当前子窗体内一文本框的内容。

操作步骤:

1.打开Microsoft Visual Studio 2008新建一个Windows窗体应用程序;
2.将默认窗体Form1的IsMdiContainer属性设置为true,表示当前窗体是一个MDI容器(父窗体);
3.再新建一Windows 窗体Form2;
4.在Form2中添加一个TextBox,命名为textBox1,将其Multiline属性设置为true,调整好大小,再打开Form2.Designer.cs设置textBox1的访问权限,找到:

private System.Windows.Forms.TextBox textBox1;

将private改为public;
5.在Form1中添加一个MenuStrip控件,新建两个菜单菜"新建"和"获取内容",给两个菜单的Click事件分别添加处理程序,最终Form1的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Form2 newForm;//新窗体实例
        Form2 nowForm;//当前激活子窗体
        int count = 0;//子窗体数量

        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 菜单:新建子窗体
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void NToolStripMenuItem_Click(object sender, EventArgs e)
        {
            count++;

            newForm = new Form2();
            newForm.Name = "New_" + count.ToString();
            newForm.Text = "New_" + count.ToString();
            newForm.MdiParent = this;//设置为当前窗体的子窗体
            newForm.Activated += new System.EventHandler(ChildActivated);
            newForm.Show();
        }

        /// <summary>
        /// 菜单:获取子窗体文本框内容
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (nowForm != null && Application.OpenForms[nowForm.Name]!=null)
            {
                MessageBox.Show(nowForm.textBox1.Text);
            }
            else
            {
                MessageBox.Show("当前没有子窗体或子窗体已经关闭!");
            }
        }

        /// <summary>
        /// 子窗体激活后将子窗体实例传给nowForm
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ChildActivated(object sender, EventArgs e)
        {
            nowForm = (Form2)sender;
        }

    }
}


最终效果:



评论: 0 | 引用: 0 | 查看次数: 4246
发表评论
登录后再发表评论!