ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]如何在MDI中使子窗体只保留一个实例

[转载]如何在MDI中使子窗体只保留一个实例

原创 Linux操作系统 作者:dinner1007 时间:2019-05-17 13:36:08 0 删除 编辑
如何在MDI中使子窗体只保留一个实例
如何在MDI中使子窗体只保留一个实例

由于在MDI中,子窗体会很多,那么在我以前一篇文章中所提到的方法就有些繁琐了。为了能适应多个子窗体,并对于每个子窗体只保留一个实例,那么我就用一个新的方法来替换,即用反射方法来作处理。

大致代码如下。

首先是通过子窗体类型名来判断是否打开新的子窗体,还是把原有的子窗体进行显示。

using System.Reflection;

///

/// Open child window

///

///

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();

}

}

}

///

/// Search mdi child form by specific type string

///

///

///

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() );

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-130552/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    1714
  • 访问量
    1477781