浅谈wince项目开发---窗体布局

  浅谈wince项目开发---窗体布局

  在园子里混了这么多年,从这里得到无数却从未有过付出,倍感汗颜;今天终于申请了个博客,也想着不管咋地也要为咋们中国的软年事业做点贡献^-^,不过却是提笔无言呀,就随便写点吧,希望各位大虾多抛砖、多批评、多指证,不是说无批判的欣赏不是真正的欣赏吗。

  前不久手上刚好有个wince的项目完工,在此我就对在项目开发过程中的一些问题和经验和大家做个分享吧!此项目是一个大型连锁商城的物流无线RF管理系统,使用的设备是MOTO MC3000;今天就先跟大家说点肤浅的东西(我可不是一个肤浅的人...)窗休的布局。无论做什么样的项目需求是必须的吧,也不单是软件项目啦,其实无论做什么事我觉得这个都是必不可少的,做没有任何目的的事,这种事这种人到现目前我基本还没发现;废话太多...进入正题

  窗体需求:1、统一大小、统一界面、界面简单,原因很简单因为大家都知道手持设备的屏幕都很小,如果窗体大小不统一,界面上控件太多,那会让使用的人眼花缭乱,用户休验就不说了,那会大大增加操作员的操作失误;2、窗体数量庞大,同时加载的窗体比较多,窗体间的切换频繁、数据交换量大。

  其实这个需求也很简单,大家可能脑子里现在已经有一套完整的解决方案了,这里我就给先给大家说说我自己的思路吧 ;

  第一方案就按照需求一个一个的做吧,相同的大小,统一的界面我复制吧,这样快多了......还好我最终没有这么做,不然可能早被老板开了; 现在都SOA了你还POP。没办法那就第二方案吧,你不是说我POP嘛,那我就也整点OOP吧,你一定也想到了吧,继承不就解决问题了吗,我定义一个父窗体,其他的都从他继承那就好了,哈哈我聪明吧;问题解决了吗?回过头来看看需求,第一条算勉强解决了吧,可第二条呢,同时加载大量的窗体,性能上怎么控制,对于一个内存32M的设备这个是必须考虑的;在大量的窗体间进行切换,窗体间大量数据的传递,这样的控制又该怎么做呢。对于这些问题第二方案不管怎么做都有些不尽人意的地方;没办法重头在来吧,谁叫咋不是老板呢。到了这里我们的主角(用户空件)终于要出场了,用户空件能很轻松的帮解决了上面的种种问题,实现非常简单我就不细说了,这里就是提供一种思路,当然可能很多大虾早就是这种在做的了,也可能还有更好的办法,望提出给大家学习学习,不要藏私哟!

  为了照顾刚刚初涉此道的朋友,我还是把具体的思路说一下:

 1、整个程序只使用一个窗体作为容器;

 2、定义一个baseControl继承于UserControl,我们可以在这里统一定制界面和其他共有的属性方法 ,后面所有的窗体控件都从这里继承

  

View Code
namespace xinzhi.rf.sortingDelivery
{
    /// <summary>
    /// 定义一个用户件件继承于UserControl,后面所有的用户控件都从这里继承
    /// </summary>
    public partial class baseControl : UserControl
    {       
        public baseControl()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 清除所文本框里的内容
        /// </summary>
        public void clearAllTextBox()
        {
            foreach (Control control in base.Controls)
            {
                if (control is TextBox)
                {
                    ((TextBox)control).Text = "";
                }
            }
        }
        /// <summary>
        /// 实现快捷键 ,这个是必须的,因为在这些手持设备上基本都是快捷键操作
        /// </summary>
        /// <param name="e"></param>
        public virtual void processKeyDown(KeyEventArgs e){}
        /// <summary>
        /// 实现控件的Show事件,这个也是必须的
        /// </summary>
        public virtual void initShow(){}
        ......
    }
}

3、我这里就贴出其中一个窗体控件的代吗,相信聪明的你一看就明白了

View Code
namespace xinzhi.rf.sortingDelivery
{
    public partial class MainControl : baseControl
    {
        public MainControl()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 打开拣货分发主窗口--注意这里,所有的窗口的控制都是放在Program下一个呢nextForm的方法来做的
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButSortingClick(object sender, EventArgs e)
        {
            var sc = new SortingControl();
            Program.nextForm((frm_main)this.Parent, sc, "新知分拣发货系统--任务管理");
        }
        /// <summary>
        /// 退出程序
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButCancelClick(object sender, EventArgs e)
        {
            Program.messageConfirm("你是否确定退出?");
            Application.Exit();
        }
        /// <summary>
        /// 重写OnKeyDown实现快捷键
        /// </summary>
        /// <param name="e"></param>
        public override void processKeyDown(KeyEventArgs e)
        {
            base.processKeyDown(e);
            Keys keyCode = e.KeyCode;
            if (keyCode == Keys.Escape)
            {
                this.ButCancelClick(null, null);
            }
            else
            {
                switch (keyCode)
                {
                    case Keys.F1:
                        this.ButSortingClick(null, null);
                        return;
                    case Keys.F2:
                        this.but_delivery_Click(null, null);
                        return;
                }
            }
        }
        /// <summary>
        /// 重写initShow实现Show事件,这里主要是对窗体控件的一些初始设置
        /// </summary>
        public override void initShow()
        {
            base.initShow();
            if (this.cmb_user.Text.Trim() != "")
            {
                this.txt_passwd.Focus();
            }
            else
            {
                this.cmb_user.Focus();
            }
        }
    }
}

到这里这篇处女作算是完工了,当然还有很多的东西没说明白,不过那不是本文的重点;在此我要非常感谢你看这么劣质的文章能看到这里!以后我想我会进步的,谢谢!

  

 

转载于:https://www.cnblogs.com/ices/archive/2012/05/14/2499670.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值