【问题标题】:c# - automatic opacity change in windows for appc# - 应用程序窗口中的自动不透明度更改
【发布时间】:2013-06-01 14:17:09
【问题描述】:

我尝试让我的 Windows 窗体应用程序将不透明度从 1 更改为 0(不可见形式),然后在按下按钮时从 0 不透明度更改为 1(正常、可见形式)。

每个不透明度更改步骤都与计时器相关联。它使不透明度发生变化 (-/+0,10) 在每个 timer1_tick 中。

我从不透明度 = 1 (100%) 开始

现在我有类似的东西:

public partial class Form1 : Form
{
    double OpacityStep; 

    public Form1()
    {
        OpacityStep = 0.10; 
        InitializeComponent();
        updateButton1(); 
        updateButton2();
    }

    private void updateButton1() 
    {
        if (Opacity < 1.00) button1.Enabled = true; 
        else 
        {
            button1.Enabled = false;
        }
    }

    private void updateButton2()
    {
        if (Opacity > 0.0) button2.Enabled = true;
        else 
        {
            button1.Focus(); 
            button2.Enabled = false;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        double NewOpacity = Opacity + OpacityStep; 
        if (NewOpacity > 1.0) Opacity = 1.0; 
        else Opacity = NewOpacity;
        updateButton2(); 
        updateButton1();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        double NewOpacity = Opacity - OpacityStep;

        if (NewOpacity < 0.0) Opacity = 0.0; 
        else Opacity = NewOpacity;
        updateButton1();
        updateButton2();
    }

    private void button3_Click(object sender, EventArgs e) // app start
    {
        this.timer1.Interval = 1000;
        this.timer1.Enabled = true;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {   
        button2_Click(sender, e);
    }
}

此代码使我的应用程序不可见,但如何使其恢复可见 (opacity = 1) ? ? ?

【问题讨论】:

  • 不想批评,但这是一种非常混乱的做事方式......您为每种方法调用Click事件有什么特别的原因吗?
  • 我刚开始编程,这是我的第一个应用程序之一,所以我尽我所能,而不是最好的:>.
  • 那么也许您应该提供更详细的说明,说明您真正想要完成的工作。你会得到很多更好的答案。
  • 再说一次,我不确定您要完成什么。但是,如果您发布的代码可以使您的表单不可见。然后反转该过程以使其再次可见。很难遵循程序的流程,因此很难用实际的代码示例编写答案。

标签: c# winforms opacity


【解决方案1】:

“我尝试让我的 Windows 窗体应用程序将不透明度从 1 更改为 0(不可见形式),然后在按下按钮时从 0 不透明度更改为 1(正常、可见形式)。”

对我来说听起来很清楚:

public partial class Form1 : Form
{

    double OpacityStep = 0; 

    public Form1() 
    {            
        InitializeComponent();

        timer1.Interval = 100;
        timer1.Enabled = false;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        button1.Enabled = false;
        this.Opacity = 1;
        OpacityStep = -0.10;
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        double NewOpacity = Opacity + OpacityStep;
        if (NewOpacity <= 0)
        {
            NewOpacity = 0;
            OpacityStep = 0.10;
        }
        else if(NewOpacity >= 1 && OpacityStep  > 0)
        {
            NewOpacity = 1.0;
            button1.Enabled = true;
            timer1.Stop();
        }
        this.Opacity = NewOpacity;
    }

}

编辑:“如果我需要循环这个(不透明度从 1 到 0 并从 0 到 1,在循环中),我应该在这段代码中更改什么?”

使用 for 循环:

    private void button1_Click(object sender, EventArgs e)
    {
        button1.Enabled = false;

        // fade out:
        this.Opacity = 1.0;
        for (double opacity = 1.0; opacity >= 0.0; opacity = opacity - .1)
        {
            System.Threading.Thread.Sleep(100);
            this.Opacity = opacity;
            Application.DoEvents();
        }

        // fade in:
        this.Opacity = 0.0;
        for (double opacity = 0.0; opacity <= 1.0; opacity = opacity + .1)
        {
            System.Threading.Thread.Sleep(100);
            this.Opacity = opacity;
            Application.DoEvents();
        }
        this.Opacity = 1.0;

        button1.Enabled = true;
    }

【讨论】:

  • 非常感谢。我还有一个问题。如果我需要循环这个(不透明度从 1 到 0 再从 0 到 1,在循环中),我应该在这段代码中改变什么?
  • 如果你想使用循环然后摆脱计时器...见上面添加的sn-p。
猜你喜欢
  • 1970-01-01
  • 2021-09-16
  • 2013-09-24
  • 1970-01-01
  • 2023-03-05
  • 2011-04-28
  • 2016-10-19
  • 1970-01-01
  • 2020-08-18
相关资源
最近更新 更多