質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • C#

    7406questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C# Graphicsに変数が加算されない

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 624

takahashita

score 36

一秒たつごとにブロックが45下に落ちるプログラムを作っていますが、
何秒たっても変化がありません。
説明:
im=ゲームの枠
fm[1]=2x2の四角
fm[2]=2x2の四角
fm[3=2x2の四角
fm[4]=2x2の四角
fm[5]=2x2の四角
fm[6]=2x2の四角
fm[7]=2x2の四角
UI=tm.Start();から何秒たったか、(16秒たつごとに0に戻る)
getout=イベントごとに変化させていくつもりですが、今は特に意味はありません。

コード
using System.Windows.Forms;
using System.Drawing;
using System;
using System.Collections.Generic;

class Sample1 :Form
{
    private static Image im;
    private static int i, getout, IU, UI, big, side, hichi;
    private static int[] saikoro = new int[80];
    private static Image[] fm = new Image[8];
    private static Label lb = new Label(), f_hichi = new Label(), f_big = new Label();
    [STAThread]
    public static void Main(){

    Application.Run(new Sample1());
    }

public Sample1(){
    this.Text="サンプル";
    this.Width=800;
    this.Height = 800;
    hichi = 0;

    getout = 1;
    System.Random r = new System.Random(7);
    saikoro[getout] = r.Next(1, 7);
    lb = new Label();
    lb.Top = 500;
    lb.Width = 20;
    lb.Height = 10;
    lb.Left=0;
    f_hichi.Top = 500;
    f_hichi.Width = 20;
    f_hichi.Height = 10;
    f_hichi.Left = 29;
    f_big.Top = 600;
    f_big.Width = 100;
    f_big.Height = 10;
    f_big.Left = 0;
    f_big.Parent = this;
    f_hichi.Parent = this;
    lb.Parent = this;

    im = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\WAKU.png");
    fm[1] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\barcpp.jpg");
    fm[2] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\animalcpp.jpg");
    fm[3] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\jcpp.jpg");
    fm[4] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\KEYcpp.jpg");
    fm[5] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\PEEKcpp.jpg");
    fm[6] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\squrecpp.jpg");
    fm[7] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\トcpp.jpg");
    Timer tm=new Timer();
    tm.Interval = 1000;
    tm.Start();

    tm.Tick += new EventHandler(tm_Tick);
    this.Paint += new PaintEventHandler(fm_Paint);

}
public void fm_Paint(Object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;

    g.DrawImage(im, 0, 0, im.Width * 2 + 100, im.Height * 2);
    g.DrawImage(fm[saikoro[getout]], 45, 4+UI*45, fm[saikoro[getout]].Width + 10, fm[saikoro[getout]].Height + 10);
}

public void tm_Tick(Object sender,EventArgs e)
{
    UI++;

    if (UI == 17)
    {
        UI = 0;
    }




    lb.Text = UI.ToString();

}
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

「tm_Tick」の中で描画処理をやらなきゃだめなんじゃないですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/28 14:20 編集

    public void tm_Tick(Object sender, PaintEventArgs e)に変えて  g.DrawImage(fm[saikoro[getout]], 45, 4 + UI * 45, fm[saikoro[getout]].Width + 10, fm[saikoro[getout]].Height + 10);を tm_Tickに移動させたらtm.Tick += new EventHandler(tm_Tick);のところでえらーがでました。Error 1 No overload for 'tm_Tick' matches delegate 'System.EventHandler' :\Users\name\Documents\Visual Studio 2013\Projects\WindowsFormsApplication1\WindowsFormsApplication1\CodeFile1.cs 57 16 WindowsFormsApplication1
    timerイベントで描画処理する方法をおしえてください。

    キャンセル

  • 2016/03/28 14:36

    たとえば http://www.java2s.com/Code/CSharp/2D-Graphics/Timerbasedanimation.htm <-では「timer1_Tick」の中で描画してますね。

    キャンセル

0

tkturboさんがおっしゃられている通り、「tm_Tick」の中で描画処理をしないとただ時間とともにUIの値が変わるだけになってしまいます。

「Sample1()」はコンストラクタですので最初の1回しか呼び出されません。
「fm_Paint」は故意に呼び出そうとしないと呼び出されないです。

下記ソースコードのような描画をする処理を「tm_Tick」で呼び出されるようにするといいんじゃないでしょうか。
再描画ではないので、いったんFrom全体をクリアしてから描画する必要がありますが。

//using System.Drawing;

//画像ファイルを読み込む
Image img = Image.FromFile(@"C:\Blue hills.jpg");

//Panel1のGraphicsオブジェクトを作成
Graphics  g= this.CreateGraphics();

//画像を描画
g.DrawImage(img, 60, 10, img.Width, img.Height);

//ImageとGraphicsオブジェクトを破棄
img.Dispose();
g.Dispose();

参考:コントロールのGraphicsオブジェクトを使って、画像を表示する

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

おそらくですが

public void tm_Tick(Object sender,EventArgs e)
{
    UI++;

    if (UI == 17)
    {
        UI = 0;
    }
            this.Invalidate(true);//追加
            Application.DoEvents();//追加


と2行を追加するだけで所望の動作をするかと思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    7406questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。