【问题标题】:Window form opacity .. How to control?窗体不透明度..如何控制?
【发布时间】:2011-12-30 05:57:07
【问题描述】:

我现在有一个单一的窗体窗口应用程序,我想在应用程序运行时更改form opacity。意味着当应用程序运行时,它将显示low opacity 表格,并且随着时间的增加,它将显示带有100 opacity 的完整表格。那么如何做到这一点。 (我应该使用定时器控制来控制不透明度,如果是那么如何????)

【问题讨论】:

    标签: c# winforms c#-4.0 c#-3.0


    【解决方案1】:

    在表单的构造函数中你可以这样写。

    this.Opacity = .1;
    timer.Interval = new TimeSpan(0, 0, intervalinminutes);
    timer.Tick += ChangeOpacity;
    timer.Start();
    

    然后像这样定义一个方法

    void ChangeOpacity(object sender, EventArgs e)
    {
        this.Opacity += .10; //replace.10 with whatever you want
        if(this.Opacity == 1)
            timer.Stop();
    }
    

    【讨论】:

    • 好的,但是你认为它会在表单加载时工作吗...意味着当应用程序运行时,它会显示低不透明度的表单,随着时间的增加,它将显示具有 100 不透明度的完整表单。???跨度>
    • 是的,它会起作用的。为此,您必须将不透明度设置为低值。我已经更新了答案。
    • 我会添加一个检查值是否为 1,然后停止计时器。
    • @ivowiblo:谢谢。这是必须的。更新了答案。
    【解决方案2】:

    要淡入淡出表格,我通常这样做:

    for(double opacity = 0.0; opacity <= 1.0; opacity += 0.2) {
        DateTime start = DateTime.Now;
        this.Opacity = opacity;
    
        while(DateTime.Now.Subtract(start).TotalMilliseconds <= 30.0) {
            Application.DoEvents();
        }
    }
    

    如果您不经常这样做,这是一个不错的简单解决方案。否则,我建议使用线程。

    【讨论】:

    • 避免创建多余的计时器可能是个好主意。但我认为下一步是使用计时器,而不是尝试从多个线程操作 GUI...
    • @minitech - 很好,我把它放在 form_load 事件中并且效果很好,但是当我把它放在 form1_FormClosing 事件中时(循环从 1.0 更改为 0,表单只是只是关闭并且不会淡出。有什么想法吗?
    • @harag:这是因为FormClosing 事件发生在表单关闭之前,即如果您不取消它,它关闭。这是因为Application.DoEvents() 处理等待消息,例如关闭表单的消息。所以对于关闭,将e.Cancel设置为true,淡出,然后再次关闭;但请确保在表单中保留一个标志,以免陷入无限循环。
    • @minitech 感谢您的解释,非常感谢。我会试试看会发生什么。
    • @CodyGray:计时器就是这样做的 :)
    【解决方案3】:

    在构造函数中,启动计时器控件,该控件将在每次滴答时调用一个方法。

    timer.Interval = 1000; 
    timer.Tick += new EventHandler(TimerEventProcessor);
    timer.Start(); 
    

    ............

     private static void TimerEventProcessor(Object myObject,
                                                EventArgs myEventArgs) 
      {
           if(this.Opacity < 1)
             this.Opacity += .1;
           else
               timer.Stop(); 
      }
    

    【讨论】:

    • 你能建议我吗,表单关闭时如何做?意味着当我关闭它时会降低不透明度
    • 在表单关闭事件处理程序中,您可以取消启动计时器的事件,当 opacity 为 0 时,自行关闭表单。
    【解决方案4】:

    退出减少不透明度动画

           ///////\\\\\\ Coded by Error X Tech ///////\\\\\\
    
     System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
     private void DecreaseOpacity(object sender, EventArgs e)
        {
            if (this.Opacity >= 0.1)
            {
                this.Opacity -= 0.04; //replace 0.04 with whatever you want
            }
            if (this.Opacity <= 0.0)
                timer.Stop();
            if (this.Opacity <= 0.1)
            {
                System.Environment.Exit(1);
                Process.GetCurrentProcess().Kill();
            }
        }
    
    private void Exit_Click(object sender, EventArgs e)
        {
            
            timer.Interval = 47; //replace 47 with whatever you want
            timer.Tick += DecreaseOpacity;
            timer.Start();
        }
    

    【讨论】:

      【解决方案5】:

      在构造函数中,将不透明度设置为 0,并以 10 或 100 毫秒的间隔启动一个计时器。在timer_Tick事件中,你只需要运行this.Opacity += 0.01;

      这将使不透明度从 0 开始并每隔几毫秒增加 0.01 直到它为 1(不透明度是双倍的,当它达到 1 的值时它是完全不透明的)

      【讨论】:

        【解决方案6】:

        在应用程序启动时增加不透明度动画

                ///////\\\\\\ Coded by Error X Tech ///////\\\\\\
        System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
        void IncreaseOpacity(object sender, EventArgs e)
            {
                if (this.Opacity <= 1)  //replace 0.88 with whatever you want
                {
                    this.Opacity += 0.01;  //replace 0.01 with whatever you want
                }
                if (this.Opacity == 1) //replace 0.88 with whatever you want
                    timer.Stop();
            }
        private void Form1_Load(object sender, EventArgs e)
            {
                this.Opacity = .01;
                timer.Interval = 10; //replace 10 with whatever you want
                timer.Tick += IncreaseOpacity;
                timer.Start();
             }
        

        【讨论】:

          猜你喜欢
          • 2012-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-23
          • 2011-12-14
          • 1970-01-01
          相关资源
          最近更新 更多