博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如何控制静态Form类与普通的Form类之间的切换

Posted on 2011-01-14 13:28  amey  阅读(457)  评论(0)    收藏  举报

  当我们在wm项目中需要经常显示一个窗体(比如是地图显示的窗体),而且这个窗体中显示的东西又比较多时,我们可以考虑在该窗体中定位一个单例模式的静态对象:

代码如下:

       #region
        private static readonly MapForm _instance = new MapForm();
        #endregion
        #region Properties
        public static MapForm Instance
        {
            get
            {
                return _instance;
            }
        }

   #endregion

 

  接下去当我们在别的窗体中调用并显示MapForm时,如下代码:

   MapForm.Instance.Show();

   MapForm.Instance.TopMost=True;

      然而,当我们关闭这个窗体时,如果没有通过该窗体的Closing事件使窗体处于隐藏的状态的话,下次再调用该MapForm窗体时,会出现该MapForm窗体的Menu菜单不可用,原因是刚才关闭窗体时,没有通过Closing事件个来完成如下的代码操作。

   private void MapForm_Closing(object sender, CancelEventArgs e)
        {
            e.Cancel = true;

            Visible = TopMost = false;
        }

     怎么样才能触发Closing事件呢,答案是把MapForm的MinimizeBox设为false,窗体在新建时MinimizeBox是为true的。默认情况下,show()窗体时,窗体的左上角是打叉的按钮,如果将MinimizeBox设为false,show()窗体时,窗体的左上角是OK的按钮。

  当然,如果你显示MapForm.ShowDialog()时,窗体的左上角是OK的按钮。