zoukankan      html  css  js  c++  java
  • IssueVision的两个不是问题的问题

    最近在用Smart Client写范本,由于是第一次用SC,再加上平时写WinForm比较少,所以拿TaskVision和IssueVision作为参考.昨天看了IssueVision的登陆的实现过程,发现了两个小小的问题.

    第一个问题
    IV登陆窗口有点酷,是渐渐显示的(渐显),看了下面代码

            private void fadeTimer_Tick(object sender, EventArgs e)
            {
                
    if (m_showing)
                {
                    
    double d = 1000.0 / fadeTimer.Interval / 100.0;
                    
    if (Opacity + d >= 1.0)
                    {
                        Opacity 
    = 1.0;                                                    
                        fadeTimer.Stop();                                                  //fadeTimer从命名上看知道应该是个显示/隐的定时器.
                    }
                    
    else
                    {
                        Opacity 
    += d;                                                        //控制窗口的不透明度.
                    }
                }
                
    else
                {
                    
    double d = 1000.0 / fadeTimer.Interval / 100.0;
                    
    if (Opacity - d <= 0.0)
                    {
                        Opacity 
    = 0.0;
                        fadeTimer.Stop();
                    }
                    
    else
                    {
                        Opacity 
    -= d;
                    }
                }
            }

    注意到这段代码的else部分,从程序上看应该是渐隐.
    再看一下Closing事件
            private void LoginForm_Closing(object sender, CancelEventArgs e)
            {
                m_showing 
    = false;
                fadeTimer.Start();
            }
    从LoginForm_Closing可以看出窗口是想实现渐隐的,但是实际上关闭窗口时并没有渐隐的效果,Why?

    查了一下MSDN的Closing事件
    "在窗体关闭时,Closing 事件发生。在窗体关闭后,将释放在该对象内创建的所有资源并处置该窗体。"
    我的猜想:
    虽然Closing 事件中把fadeTimer重新启动了,但是紧接着窗口就被关闭,窗体资源被释放.窗口都没了,这个渐隐变得没有效果了也是当然的.

    改进办法,"若要取消窗体的关闭操作,请将传递给事件处理程序的 CancelEventArgs 的 Cancel 属性设置为 true。"(MSDN)
    e.Cancel = true;
    然后在
    窗口完全透明时(Opacity <= 0)时才真正去关闭窗口
                    if (Opacity - d <= 0.0)
                    {
                        Opacity 
    = 0.0;
                        fadeTimer.Stop();
                        this.Close();
                    }

    还有一个问题是主窗口
    IV在Form_Load中先把自已不可见(this.Visible = false;),然后打开登陆窗口,当我关闭登陆窗口时(按"Cancel"或"X"),主窗口会闪一下,WHY?
    同样查看代码
                    Application.Exit();


    还是找不到问题所在,然后我试着在Exit()之前加了

                    this.Close();
    哈哈,后面的窗口不再闪了~~WHY?我还是搞不明白. 谁能告诉我WHY?

    最后说一个自己在昨天犯的两个错误:
    1.net中的"DateTime.MinValue值等效于 0001 年 1 月 1 日 00:00:00.0000000。","在MS SQL Server中,使用 datetime 数据类型存储从 1753 年 1 月 1 日至 9999 年 12 月 31 日的日期(每个数值要求 8 个字节的存储空间)。"
    在程序调试时为了方便,我直接使用DateTime.MinValue作为存储过程参数进行测试,结果可以想像,跟踪了好久才找到了问题~~
    2.程序在异步操作时吃掉了异常.

  • 相关阅读:
    《C# to IL》第一章 IL入门
    multiple users to one ec2 instance setup
    Route53 health check与 Cloudwatch alarm 没法绑定
    rsync aws ec2 pem
    通过jvm 查看死锁
    wait, notify 使用清晰讲解
    for aws associate exam
    docker 容器不能联网
    本地运行aws lambda credential 配置 (missing credential config error)
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
  • 原文地址:https://www.cnblogs.com/zitiger/p/211257.html
Copyright © 2011-2022 走看看