zoukankan      html  css  js  c++  java
  • Winform"窗体加载闪烁处理、无边框窗体的移动" 之 配餐系统的开发

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

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

           ——图1

         ——图2

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

    代码
    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/

    代码
    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);
    }
    }
    }
    }

      

  • 相关阅读:
    UNIGUI如何禁止关闭新窗口
    【转】华为编码规范
    awk中 使用shell的环境变量
    【转】SDL与MFC的混合
    MSSQL学习笔记
    转 在.NET环境下为网站增加IP过滤功能
    欢迎加入asp.net交流群
    配置SQL Server2005以允许远程访问
    实用的文件操作类
    VS2005 + VSS2005 实现团队开发、源代码管理、版本
  • 原文地址:https://www.cnblogs.com/know/p/1930941.html
Copyright © 2011-2022 走看看