Online Service 在线服务
New Articles 最新更新
Hot Articles 热点文章
Google 广告
首页 … 技术文档 Technical Articles
如何在MDI中使子窗体只保留一个实例
(时间:2007-10-17 18:18:14 共有 人次浏览)
由于在MDI中,子窗体会很多,那么在我以前一篇文章中所提到的方法就有些繁琐了。为了能适应多个子窗体,并对于每个子窗体只保留一个实例,那么我就用一个新的方法来替换,即用反射方法来作处理。
大致代码如下。
首先是通过子窗体类型名来判断是否打开新的子窗体,还是把原有的子窗体进行显示。
    using System.Reflection;
    /// <summary>
    /// Open child window
    /// </summary>
    /// <param name="ChildTypeString"></param>
    private void OpenWindow( string ChildTypeString )
    {
        Form myChild = null;
        if( !ContainMDIChild( ChildTypeString ) )
        {
            // Get current process assembly
            Assembly assembly = Assembly.GetExecutingAssembly();
 
            // Create data type using type string
            Type typForm = assembly.GetType( ChildTypeString );
 
            // Create object using type's "InvokeMember" method
            Object obj = typForm.InvokeMember(
                null,
                BindingFlags.DeclaredOnly |
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.CreateInstance,
                null,
                null,
                null );
 
            // Show child form
            if( obj != null )
            {
                myChild = obj as Form;
                myChild.MdiParent = this;
                myChild.Show();
                myChild.Focus();
            }
        }
    }
 
    /// <summary>
    /// Search mdi child form by specific type string
    /// </summary>
    /// <param name="ChildTypeString"></param>
    /// <returns></returns>
    private bool ContainMDIChild( string ChildTypeString )
    {
        Form myMDIChild = null;
        foreach(Form f in this.MdiChildren)
        {
            if( f.GetType().ToString() == ChildTypeString )
            {
                // found it
                myMDIChild = f;
                break;
            }
        }
 
        // Show the exist form
        if( myMDIChild != null)
        {
            myMDIChild.TopMost = true;
            myMDIChild.Show();
            myMDIChild.Focus();
            return true;
        }
        else
            return false;
    }
 
以上两部分就可以对于每个子窗体只创建一个实例。那么调用以上代码就非常简单了。
如:
    //Open a mdi child form which type named "MDIChild"
    OpenWindow( typeof( MDIChild ).ToString() );
打印 【打印该页】 【关闭窗口

此技术资料来自网络,仅供参考。未经许可,不得转载。
若有侵权,请及时与我们取得联系!
FAQS 常见问题
Consultation 即时咨询
Contact Us 联系我们