zoukankan      html  css  js  c++  java
  • 保证相同类型的MDI子窗体只会被打开一次的方法

    本文转载:http://www.cnblogs.com/Ricky81317/archive/2008/09/17/1292443.html

    看到论坛中有朋友问,如何可以保证在MDI主窗体中,同一类型的子窗体只能打开一次,再打开只是将原来打开的窗体激活。这个要求我以前写程序的时候也遇到过。我实现的基本思路是:

    一般每个子窗体都是继承自Form类型,不同子窗体分别代表不同的功能,因此只需要判断当前MDI打开的子窗体的类型中有没有当前需要打开的子窗体类型就行了,如果有,则直接激活,如果没有则创建一个并加到主窗体中。具体实现起来有很多种办法,这里只写出一个利用泛型的实现:

    复制代码
    /// <summary>
    /// 打开MDI子窗口并附加到MDI主窗口中,如果MDI主窗口中已经存在相同类型的子窗口,则直接激活
    /// </summary>
    /// <typeparam name="T">MDI子窗体类型</typeparam>
    /// <param name="mdiParent">MDI主窗体引用</param>
    /// <returns>当前创建或得到的MDI子窗体类型实例的引用</returns>
    private T OpenUniqueMDIChildWindow<T>(Form mdiParent) where T : Form, new()
    {
       
    foreach (Form subForm in mdiParent.MdiChildren)
        {
           
    if (subForm.GetType().Equals(typeof(T)))
            {
                subForm.Activate();
               
    return subForm as T;
            }
        }
        T newForm
    = new T();
        newForm.MdiParent
    = mdiParent;
        newForm.Show();
       
    return newForm;
    }
    复制代码
    这个方法可以放在你的菜单项的单击事件处理方法中。
    比如你想单击About菜单项,打开一个AboutForm类型的窗体,那么就:
    OpenUniqueMDIChildWindow<AboutForm>(this)
    看代码的话,你会发现,如果About窗体已经被打开过的话,会自动激活那个窗体,如果没有,那么它会自己new一个出来,不需要你手工创建。
  • 相关阅读:
    配置PyDev,开始eclipsePython之旅
    PyDev下PyQt 的尝试
    逻辑回归 C++
    HP Unix vsftp服务配置
    线性回归(最小二乘法、批量梯度下降法、随机梯度下降法、局部加权线性回归) C++
    批量梯度下降(Batch gradient descent) C++
    利用expect验证主机口令
    python Paramiko 模块远程管理主机
    文件系统巡检
    awk查找特定字段
  • 原文地址:https://www.cnblogs.com/51net/p/3358946.html
Copyright © 2011-2022 走看看