Form Size(Max & Min)

Button のクリックで、アニメページに切り替えます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. Button のクリックで、美人やギャルのアニメーションページに切り替えます。
    切り替えるとき、Form1 を最小化してアニメページを最大化します。
    ページの多重起動を防ぐ方法も紹介します。
  2. 自動生成でプロジェクトを構築して、[追加/Windows フォーム]からフォームを追加します。
    Form1 と Form2 の二個の Form が作成されます。
    Form2 は Form1 と同様に画像を描画するためのウインドウを持ちます。
    ここにタイマー設定でアニメーションする Class をプログラムします。
    どちらの Form もプロパティからサイズを最大化して下さい。
        this.WindowState = FormWindowState.Maximized;
    
  3. [追加/新しい項目の追加]から[コードファイル]を追加します。
    ファイル名を Card.cs にして class Card のソースコードを張り付けます。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsApplication1
    {
        //☆Card Object Class
        class Card
        {
            public Bitmap bmp;
            public int W;      //Sprite の幅
            public int H;      //Sprite の高さ
            public int N;      //横の枚数
            // Constructor
            public Card(string file, int w, int h)
            {
                try
                { bmp = new Bitmap(file); }
                catch
                {
                    MessageBox.Show("イメージが取得できません", "Error");
                    return;
                }
                W = w;
                H = h;
                N = bmp.Width / w;
            }
            // 画像全体を描画
            public void View(Graphics g, int x, int y)
            { if (bmp != null)  g.DrawImage(bmp, x, y); }
            // Sprite を描画
            public void View(Graphics g, int n, int x, int y)
            {
                Rectangle des = new Rectangle(x, y, W, H);
                Rectangle sou = new Rectangle((n % N) * W, (n / N) * H, W, H);
                if (bmp != null)
                    g.DrawImage(bmp, des, sou, GraphicsUnit.Pixel);
            }
        }
    }
    
  4. Form2 の Constructor でアニメーション画像をロードします。
            Card App;
            int SP_NO = 0;
    
            public Form2()
            {
                InitializeComponent();
                App = new Card(@"c:\data\test\bijin16.jpg", 60, 60);
                timer1.Start();
            }
    
  5. Form2 にツールボックスからタイマーを張り付けて、稲妻アイコンから timer1_Tick() イベントを追加します。
    Tick イベントを 200 に設定して下さい。
    timer1_Tick() メソッドをコーディングします。
            int SP_NO = 0;
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                SP_NO = (SP_NO + 1) % 16;
                Invalidate();
            }
    
  6. Form2 の Paint に MyHandler のイベントを追加します。
            private void MyHandler(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                if (App.bmp == null) Application.Exit();
                App.View(g, SP_NO, 20, 100);
            }
    
  7. Form1 に二個のボタンを貼り付けます。
    Button1_Click のイベントハンドラを作成して Form2 を呼び出します。
    Anime1 が重複して呼び出されるのを禁止しています。
        public partial class Form1 : Form
        {
            Form2 Anime1 = null;
    
            private void Button1_Click(object sender, EventArgs e)
            {
                if ((Anime1 == null) || Anime1.IsDisposed)
                {
                    this.WindowState = FormWindowState.Minimized;
                    Anime1 = new Form2();
                    Anime1.Show();
                }
            }
    
  8. プログラムをコンパイル&実行してボタン1をクリックするとアニメーションページが表示されます。
    戻るときはアニメーションを閉じて、タスクバーから Form1 を標準に戻します。
    今回は使いませんが、プログラムで標準ウインドウに戻すときは WindowState に Normal を設定します。
    アニメーションプログラムは Multi Windows Animation を参照して下さい。

二枚目のアニメーション

  1. 美人のアニメーションに続いてギャルのアニメーションを設定します。
    Form1 には二個のボタンが設定されています。
  2. Form2 に準じて Form3 を作成します。
    Form3 に Girl のアニメーションを設定して Form を最大化します。
            public Form3()
            {
                InitializeComponent();
                App = new Card(@"c:\data\test\girl.gif", 128, 216);
                timer1.Start();
            }
    
  3. タイマーを張り付けて、稲妻アイコンから timer1_Tick() イベントを追加します。
            private void timer1_Tick(object sender, EventArgs e)
            {
                SP_NO = (SP_NO + 1) % 7;
                Invalidate();
            }
    
  4. Form1 の Button2_Click からギャルのアニメーションを呼び出します。
        Form3 Anime2 = null;
        private void Button2_Click(object sender, EventArgs e)
        {
            if ((Anime2 == null) || Anime2.IsDisposed)
            {
                this.WindowState = FormWindowState.Minimized;
                Anime2 = new Form3();
                Anime2.Show();
            }
        }
    
  5. ボタン1をクリックすると美人のアニメーションページが表示されます。
    ボタン2をクリックするとギャルのアニメーションページが表示されます。
    戻るときはアニメーションを閉じて、タスクバーから Form1 を標準に戻します。
    Form1 を閉じると実行中のアニメーションも終了します。

超初心者のプログラム入門(C# Frame Work)