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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

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

Q&A

3回答

1871閲覧

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

takahashita

総合スコア44

C#

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

0グッド

0クリップ

投稿2016/03/28 04:47

一秒たつごとにブロックが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=イベントごとに変化させていくつもりですが、今は特に意味はありません。

C#

1コード 2using System.Windows.Forms; 3using System.Drawing; 4using System; 5using System.Collections.Generic; 6 7class Sample1 :Form 8{ 9 private static Image im; 10 private static int i, getout, IU, UI, big, side, hichi; 11 private static int[] saikoro = new int[80]; 12 private static Image[] fm = new Image[8]; 13 private static Label lb = new Label(), f_hichi = new Label(), f_big = new Label(); 14 [STAThread] 15 public static void Main(){ 16 17 Application.Run(new Sample1()); 18 } 19 20public Sample1(){ 21 this.Text="サンプル"; 22 this.Width=800; 23 this.Height = 800; 24 hichi = 0; 25 26 getout = 1; 27 System.Random r = new System.Random(7); 28 saikoro[getout] = r.Next(1, 7); 29 lb = new Label(); 30 lb.Top = 500; 31 lb.Width = 20; 32 lb.Height = 10; 33 lb.Left=0; 34 f_hichi.Top = 500; 35 f_hichi.Width = 20; 36 f_hichi.Height = 10; 37 f_hichi.Left = 29; 38 f_big.Top = 600; 39 f_big.Width = 100; 40 f_big.Height = 10; 41 f_big.Left = 0; 42 f_big.Parent = this; 43 f_hichi.Parent = this; 44 lb.Parent = this; 45 46 im = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\WAKU.png"); 47 fm[1] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\barcpp.jpg"); 48 fm[2] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\animalcpp.jpg"); 49 fm[3] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\jcpp.jpg"); 50 fm[4] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\KEYcpp.jpg"); 51 fm[5] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\PEEKcpp.jpg"); 52 fm[6] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\squrecpp.jpg"); 53 fm[7] = Image.FromFile(":\\Users\\name\\Pictures\\TETRIS\\トcpp.jpg"); 54 Timer tm=new Timer(); 55 tm.Interval = 1000; 56 tm.Start(); 57 58 tm.Tick += new EventHandler(tm_Tick); 59 this.Paint += new PaintEventHandler(fm_Paint); 60 61} 62public void fm_Paint(Object sender, PaintEventArgs e) 63{ 64 Graphics g = e.Graphics; 65 66 g.DrawImage(im, 0, 0, im.Width * 2 + 100, im.Height * 2); 67 g.DrawImage(fm[saikoro[getout]], 45, 4+UI*45, fm[saikoro[getout]].Width + 10, fm[saikoro[getout]].Height + 10); 68} 69 70public void tm_Tick(Object sender,EventArgs e) 71{ 72 UI++; 73 74 if (UI == 17) 75 { 76 UI = 0; 77 } 78 79 80 81 82 lb.Text = UI.ToString(); 83 84} 85}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

おそらくですが

public void tm_Tick(Object sender,EventArgs e) { UI++; if (UI == 17) { UI = 0; } this.Invalidate(true);//追加 Application.DoEvents();//追加

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

投稿2016/03/28 14:15

skltn00

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

C#

1//using System.Drawing; 2 3//画像ファイルを読み込む 4Image img = Image.FromFile(@"C:\Blue hills.jpg"); 5 6//Panel1のGraphicsオブジェクトを作成 7Graphics g= this.CreateGraphics(); 8 9//画像を描画 10g.DrawImage(img, 60, 10, img.Width, img.Height); 11 12//ImageとGraphicsオブジェクトを破棄 13img.Dispose(); 14g.Dispose();

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

投稿2016/03/28 08:03

pinnkoro

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/03/28 05:09

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takahashita

2016/03/28 05:23 編集

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イベントで描画処理する方法をおしえてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問