【重构】同一个窗体,多次单击,只显示一个——单例模式

问题

在做机房的时候,会在主窗体有很多个子窗体,有三大问题:
1、如何让子窗体总在父窗体内呢?
2、如何保证子窗体一直在父窗体之上?
3、还有同一个窗体,点击显示这个窗体的按钮会出现多个同样的窗体,怎样才能只出现一个呢?(这就需要单例模式了)

解决

1、子窗体

 using System.Runtime.InteropServices;


 [DllImport("user32")]
 public static extern int SetParent(int Child, int Parent);   //子窗体只在父窗体中,不能移出

//使用单例模式
 private static frmModifyPassword fmpwd;
 public static frmModifyPassword GetInstance()
 {
      if (fmpwd == null || fmpwd.IsDisposed)
      {
           fmpwd = new frmModifyPassword();
      }
      SetParent((int)fmpwd.Handle, (int)ActiveForm.Handle);
      return fmpwd;
}

2、父窗体

frmModifyPassword frmmodifypassword = frmModifyPassword.GetInstance(); //调用frmModifyPassword的GetInstance()方法,即使用单例模式
if (frmmodifypassword.Visible == false)
{
      frmmodifypassword.Show(this);   //可以保证子窗体一直显示在父窗体之上
}

总结

感觉每个子窗体都写这样的代码,总是重复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值