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

转载于:https://www.cnblogs.com/zitiger/archive/2005/08/10/211257.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值