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

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

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

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

Q&A

3回答

7403閲覧

Pictureboxのうえに定期的にGraphicsを表示したい

cancat

総合スコア313

C#

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

0グッド

0クリップ

投稿2017/09/14 11:30

編集2017/09/15 04:38

こんにちは。
Windows10でFormのアプリケーションを開発しています。
Visual Studio 2017 Communityを使っています。

###前提・実現したいこと
PictureboxのうえにGraphicsを表示したいです。
定期的に画像(PictureBox)のうえに点をプロットしたいです。
定期的な処理はTimerを使います。
点はRectangleを小さくして使います。
いま100*100は開発中で見やすくするためです。

###該当のソースコード

C#

1private void FormLoad(object sender, EventArgs e){ 2 PictureBox pictureBox = new PictureBox(); 3 pictureBox.Image = bmp; 4 pictureBox.Size = new System.Drawing.Size(bmp.Width, bmp.Height); 5 this.Controls.Add(pictureBox); 6 TimerStart(); 7} 8 9private void Timer_Tick(object sender, EventArgs e){ 10 Graphics g = Graphics.FromHwnd(this.Handle); 11 Pen pen = new Pen(Color.Red, 5); 12 g.DrawRectangle(pen, 600, 20, 100, 100); 13 g.Dispose(); 14}

###発生している問題・エラーメッセージ
これだと、長方形はPictureboxの下に隠れてしまいます。
上に載せるにはどうしたらよいでしょう?

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2017
Version 15.0.26228.9 D15RTWSVC
Microsoft .NET Framework
Version 4.6.01586

です。
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

こんにちは。

タイマーで新しいGraphics取るんじゃなくて、
PictureBoxのPaintイベントでPictureBox自身のGraphics取得してそこに描画すれば良いですよ。

csharp

1PictureBox pictureBox = new PictureBox(); 2pictureBox.Paint += (o, args) => 3{ 4 Graphics g = args.Graphics; 5 Pen pen = new Pen(Color.Red, 5); 6 g.DrawRectangle(pen, 600, 20, 100, 100); 7 pictureBox.Refresh(); 8 //g.Dispose(); 9}; 10 11pictureBox.Image = bmp; 12pictureBox.Size = new System.Drawing.Size(bmp.Width, bmp.Height); 13this.Controls.Add(pictureBox);

投稿2017/09/15 01:46

Tak1wa

総合スコア4791

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

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

cancat

2017/09/15 02:20

ありがとうございます。 今回は定期的に処理したいので、タイマー必須で。 逆に、pictureboxは(現時点では)起動時に1度だけです。
Tak1wa

2017/09/15 02:23

定期的に何をしたいのか前提条件を追加しては如何でしょう。 補足して頂けたら何か別の解決策が見当たるかもしれません。
cancat

2017/09/15 04:37

定期的に画像(PictureBox)のうえに点をプロットしたいです。
cancat

2017/09/15 13:51

じつはもうCreateGraphicsで描画しているのですが、まだだめなんですよね~。う~む。
guest

0

Graphics g = Graphics.FromHwnd(this.Handle);

this.Handle はフォームのハンドルだと思いますが、そこから得られるのはフォームの Graphics です。
Graphics.FromImage を用いて bmpGraphics を取得してみてください。
bmp に描画した後には pictureBoxInvalidate() を呼び出して画面に描画してください。

投稿2017/09/17 10:32

Zuishin

総合スコア28660

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

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

0

面倒だから、 画像をGraphics を使って描画すればいいんじゃないですかね。
そうすれば、上なのか下なのか悩まなくて済むと思います。
Pictureboxを使わないといけない理由は、特にないのでは。

それ以外だと、透明なコントロールをPictureboxの上において、それに描画するということでしょうか。WPF的な発想だけど。

投稿2017/09/14 12:22

kiichi54321

総合スコア1984

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問