首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

"窗体加载闪耀处理、无边框窗体的移动" 之 配餐系统的开发

2012-12-22 
窗体加载闪烁处理、无边框窗体的移动 之 配餐系统的开发? 本文主要跟大家分享在 ‘配餐系统’开发中 遇到的

"窗体加载闪烁处理、无边框窗体的移动" 之 配餐系统的开发

? 本文主要跟大家分享在 ‘配餐系统’开发中 遇到的问题和处理,并且会在以后的时间里,写此项目的经验总结,希望能对你有所帮助!

????? 1.窗体加载闪烁处理 ——这个问题可能大家在做winform应用程序开发中会经常碰到的问题,只是有些窗体闪烁的问题比较明显和严重 ——这时我们可以采取优化方法,比如:压缩窗体中图片的大小(如果窗体中有使用图片)...,但是可能我们尝试着去优化,发现问题并没有得到较大的改善,下面就此项目中的这种问题的处理方法的说明:

????? "窗体加载闪耀处理、无边框窗体的移动" 之 配餐系统的开发?——图1

???? "窗体加载闪耀处理、无边框窗体的移动" 之 配餐系统的开发——图2

??????? 上面两个图分别对应的是:登录(FrmLogin)和主窗体(使用的是MDI,主窗体实际是:FrmMain(MDI容器)+FrmIndex),由FrmLogin切换到主窗体,如是直接切换,主窗体显示加载时会闪烁的比较明显——因为相当于要同时加载显示 FrmMain(MDI容器)+FrmIndex 这两个窗体,且FrmIndex 窗体中使用了一个大的背景图片。 【处理方法:在FrmLogin中要切换到主窗体时,用timer控制——先设置 主窗体为完全透明,1s(timer时间间隔(在这时间间隔 内 即可完成主窗体的加载))后,再设置 主窗体为不透明】,具体实现代码如下:

?

代码
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->using System;using System.Collections.Generic;using System.Text;namespace ZhiyiForm.CodeFile{    using System.Windows.Forms;    internal class FormMove    {        private bool isMouseDown = false;        private System.Drawing.Point FormLocation;     //form的location        private System.Drawing.Point mouseOffset;      //鼠标的按下位置        private Form movedForm = null;        private Control conObj = null;        private FormMove()        { }        /// <summary>        ///         /// </summary>        /// <param name="movedForm">要移动的窗体</param>        /// <param name="conObj">控制窗体移动的控件,为null,则是窗体本身</param>        public FormMove(Form movedForm, Control conObj)        {            this.movedForm = movedForm;            this.conObj = (conObj==null)?movedForm:conObj;            this.conObj.MouseDown += new MouseEventHandler(ConObj_MouseDown);            this.conObj.MouseMove += new MouseEventHandler(ConObj_MouseMove);            this.conObj.MouseUp += new MouseEventHandler(ConObj_MouseUp);        }              private void ConObj_MouseDown(object sender, MouseEventArgs e)        {            if (e.Button == MouseButtons.Left)            {                isMouseDown = true;                FormLocation = movedForm.Location;                mouseOffset = Control.MousePosition;                this.conObj.Cursor = System.Windows.Forms.Cursors.SizeAll;            }        }        private void ConObj_MouseUp(object sender, MouseEventArgs e)        {            this.conObj.Cursor = System.Windows.Forms.Cursors.Default;            isMouseDown = false;        }        private void ConObj_MouseMove(object sender, MouseEventArgs e)        {            if (isMouseDown)            {                int _x = 0;                int _y = 0;                System.Drawing.Point pt = Control.MousePosition;                _x = mouseOffset.X - pt.X;                _y = mouseOffset.Y - pt.Y;                movedForm.Location = new System.Drawing.Point(FormLocation.X - _x, FormLocation.Y - _y);            }        }    }}

?

热点排行