0

ボタンを押すと、Windowsフォームアプリで不透明度を1から0(非表示のフォーム)に変更し、不透明度を0から1(通常の表示フォーム)に戻そうとします。

不透明度を変更するすべてのステップはタイマーに接続されています。timer1_tick ごとに不透明度を (-/+0,10) 変更します。

不透明度 = 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);
    }
}

このコードは私のアプリを非表示にしますが、どうすれば可視 (不透明度 = 1) に戻すことができますか? ? ?

4

1 に答える 1

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;
    }
于 2013-06-05T19:00:31.427 に答える