Winform"窗体加载闪烁处理、无边框窗体的移动" 之 配餐系统的开发
2011-01-08 22:05
639 查看
本文主要跟大家分享在 ‘配餐系统’开发中 遇到的问题和处理,并且会在以后的时间里,写此项目的经验总结,希望能对你有所帮助!
1.窗体加载闪烁处理 ——这个问题可能大家在做winform应用程序开发中会经常碰到的问题,只是有些窗体闪烁的问题比较明显和严重 ——这时我们可以采取优化方法,比如:压缩窗体中图片的大小(如果窗体中有使用图片)...,但是可能我们尝试着去优化,发现问题并没有得到较大的改善,下面就此项目中的这种问题的处理方法的说明:
![](http://pic002.cnblogs.com/images/2011/75158/2011010821435590.jpg)
——图1
![](http://pic002.cnblogs.com/images/2011/75158/2011010821444614.jpg)
——图2
上面两个图分别对应的是:登录(FrmLogin)和主窗体(使用的是MDI,主窗体实际是:FrmMain(MDI容器)+FrmIndex),由FrmLogin切换到主窗体,如是直接切换,主窗体显示加载时会闪烁的比较明显——因为相当于要同时加载显示 FrmMain(MDI容器)+FrmIndex 这两个窗体,且FrmIndex 窗体中使用了一个大的背景图片。 【处理方法:在FrmLogin中要切换到主窗体时,用timer控制——先设置 主窗体为完全透明,1s(timer时间间隔(在这时间间隔 内 即可完成主窗体的加载))后,再设置 主窗体为不透明】,具体实现代码如下:
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
代码
2.无边框窗体的移动 ——直接贴出代码,Demo可从CSDN上下载:http://hutao123654.download.csdn.net/
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
代码
本文出自 “不停止的飞翔” 博客,请务必保留此出处http://springsmile.blog.51cto.com/1567074/1362785
1.窗体加载闪烁处理 ——这个问题可能大家在做winform应用程序开发中会经常碰到的问题,只是有些窗体闪烁的问题比较明显和严重 ——这时我们可以采取优化方法,比如:压缩窗体中图片的大小(如果窗体中有使用图片)...,但是可能我们尝试着去优化,发现问题并没有得到较大的改善,下面就此项目中的这种问题的处理方法的说明:
![](http://pic002.cnblogs.com/images/2011/75158/2011010821435590.jpg)
——图1
![](http://pic002.cnblogs.com/images/2011/75158/2011010821444614.jpg)
——图2
上面两个图分别对应的是:登录(FrmLogin)和主窗体(使用的是MDI,主窗体实际是:FrmMain(MDI容器)+FrmIndex),由FrmLogin切换到主窗体,如是直接切换,主窗体显示加载时会闪烁的比较明显——因为相当于要同时加载显示 FrmMain(MDI容器)+FrmIndex 这两个窗体,且FrmIndex 窗体中使用了一个大的背景图片。 【处理方法:在FrmLogin中要切换到主窗体时,用timer控制——先设置 主窗体为完全透明,1s(timer时间间隔(在这时间间隔 内 即可完成主窗体的加载))后,再设置 主窗体为不透明】,具体实现代码如下:
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
代码
private FrmMain frm = null; private void picLoginBox_Click(object sender, EventArgs e) { IsShowLoading(true); this.picLoginBox.Enabled = false; this.lblLoading.Text = "系统正在加载中,请稍候..."; timer_load.Start(); } private void timer_load_Tick(object sender, EventArgs e) { try { if (frm!=null) { timer_load.Stop(); this.Hide(); frm.Opacity = 1;//设置窗体正常显示 IsShowLoading(false); } else { frm = new FrmMain(); frm.Opacity = 0;//设置窗体为完全透明 frm.Show(); this.TopMost = true; } } catch(Exception ex) { HandleError(ex); } }
2.无边框窗体的移动 ——直接贴出代码,Demo可从CSDN上下载:http://hutao123654.download.csdn.net/
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
代码
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); } } } }
本文出自 “不停止的飞翔” 博客,请务必保留此出处http://springsmile.blog.51cto.com/1567074/1362785
相关文章推荐
- Winform"窗体加载闪烁处理、无边框窗体的移动" 之 配餐系统的开发
- "窗体加载闪烁处理、无边框窗体的移动" 之 配餐系统的开发
- "窗体加载闪烁处理、无边框窗体的移动" 之 配餐系统的开发
- WinForm"reportViewer报表[矩阵]的使用(一)(附源码示例)" 之配餐系统的开发
- WinForm"reportViewer报表[矩阵]的使用(一)(附源码示例)" 之配餐系统的开发
- WinForm"reportViewer(rdlc)报表[列表]的使用(一)(附源码示例)" 之配餐系统的开发
- WinForm"仿js星形评分效果"控件制作经验分享(原创) 之配餐系统的开发
- WinForm"reportViewer(rdlc)报表[列表]的使用(一)(附源码示例)" 之配餐系统的开发
- WinForm"仿js星形评分效果"控件制作经验分享(原创) 之配餐系统的开发
- WinForm"立体饼状图实现(附源码示例)" 之配餐系统的开发
- WinForm"搜索提示效果(不错的)实现" 之 配餐系统的开发
- WinForm"立体饼状图实现(附源码示例)" 之配餐系统的开发
- WinForm"立体饼状图实现(附源码示例)" 之配餐系统的开发
- WinForm"不错的Vista风格水晶按钮"控件使用(附:源码demo) 之配餐系统的开发
- [转]WinForm"不错的Vista风格水晶按钮"控件使用(附:源码demo) 之配餐系统的开发
- winform无系统边框时移动窗体
- WinForm"tableLayoutPanel和flowLayoutPanel的使用(附源码示例)" 之配餐系统的开发
- WinForm"不错的Vista风格水晶按钮"控件使用(附:源码demo) 之配餐系统的开发
- WinForm"tableLayoutPanel和flowLayoutPanel的使用(附源码示例)" 之配餐系统的开发
- WinForm"ZedGraph柱状图"控件使用经验分享 之配餐系统的开发