• 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.程序在异步操作时吃掉了异常.

  • 相关阅读:
    mysql 数据库 II(数据类型)
    mysql 数据库 I
    网络协议
    Python 类IV(类成员,异常处理等)
    Python 类III(三大特性,约束,super)
    Python 类II
    类加载机制
    Java新篇章之集合
    Java 类类型之 String 类型
    java 多态
  • 原文地址:https://www.cnblogs.com/zitiger/p/211257.html
Copyright © 2020-2023  润新知