MDI窗体的一些问题及单件模式的应用

今天做了个MDI窗体,发现三个问题:

1、MDI子窗体是在主窗体的什么地方定义?我现在是在菜单单击事件中定义,这样便于集中管理,但同时也带来了父窗体不能控制主窗体的后果,例如父窗体不知道有多少子窗体。所以最好在主窗体中定义,并在初始化事件中设置其父窗体为this。在单击事件中调用即可。但同样烦恼的是:若在主窗体中定义,则主窗体创建过程会将子窗体全部创建,这显然会消耗系统资源。以后注意参照例子。

2、PB的MDI窗体,子窗体只能打开一次。但C#单击菜单后打开窗口A,再单击该菜单又可以打开第二个窗口A。如何处理?可以通过比较打开子窗口列表来实现,但太麻烦。

    昨天刚好在学习设计模式,立马联想到singleton单件模式(限掉多次实例化同一个类),哈哈,singleton粉墨登场。

    与第一感觉----通过外部控制相比,singleton是通过在类内部进行控制,实例化也由类自己实现,显然便于维护。下面是C#的源码:

public ChildForm : Form

{

    private static ChildForm instance = null;    //返回实例变量,注意为静态方法

    protected ChildForm(){};           //将构造方法设为protected,强制外部类不能通过new来新建实例

    public static ChildForm Instance()    //创建实例,注意为静态方法

    {

        if (instance == null)

            {

                instance = new ChildForm();

                return instance;

            }

        else

            return null;

    }

    protected override void Dispose(bool disposing)

    {

        ………………

        instance = null;    //注意这句不能漏

    }

}

使用时: ChildForm child = ChildForm.Instance();  if (child != null) …………
3、若是MVC构架,是不是每一个菜单及按钮单击事件、都需要转化到一个专门的类来处理?若如此,则一些与界面有较强耦合的操作又当如何处理?如单击某个按钮,不仅会引发一些操作,而且会改变屏幕布局。这该如何处理呢?

思考中…………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值