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

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

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

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

Q&A

解決済

1回答

5096閲覧

PictureBoxのリサイズ時に描画サイズの変更

FM88mhmh

総合スコア22

C#

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

0グッド

0クリップ

投稿2020/02/18 01:48

編集2020/02/18 05:38

ウィンドウの最大化などで、Formに配置しているPictureBoxのリサイズが発生したときに、
描画する画像のサイズ(描画範囲?)を変更したいのですが、描画サイズが変更されません。

以下のようなプログラムを回しています。

C#

1 private void PictureBox_Resize(object sender, EventArgs e) 2 { 3 int w = PictureBox.Width, h = PictureBox.Height; 4 5 PictureBox.Image = new Bitmap(w, h); // ブレークポイント 6 var g = Graphics.FromImage(PictureBox.Image); 7 g.DrawImage(bmp, point, matSrc.Width, matSrc.Height); 8 9 PictureBox.Refresh(); 10 g.Dispose(); 11 }

pic.Imageの行に到達したときは、w, hの値はリサイズ後のPictureBoxのwidthとheightの値なのですが、
もう一度F11を入力すると、次の行へ行かず、w, hの値がリサイズ前のPictureBoxの値に代わってしまいます。

w, hの値が途中で変わってしまうのはなぜなのでしょうか。

ご助言お願いいたします。

・windows 10
・Visual Studio Express 2017

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

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

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

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

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

YAmaGNZ

2020/02/18 02:36

picとは何ですか?
FM88mhmh

2020/02/18 04:46

すみません、PictureBoxです。 修正しておきます。
Zuishin

2020/02/18 05:11 編集

DrawImage してるだけで Image プロパティに代入してないからでしょう。つまり PictureBox ではなく pic に代入しなければならないのではないかということです。
YAmaGNZ

2020/02/18 05:35

多分、picやPictureBoxではなく、全部pictureBoxなんじゃないですかね? ようはリサイズの起こったPictureBoxに対してImageのリサイズを行いたいと推測しました。
guest

回答1

0

ベストアンサー

【C#】FormにDockしたPictureBoxのリサイズ時のサイズ取得にあることですかね?

気になったのでPictureBoxの実装を見てみましたがImageプロパティにSetすると、Sizeが変更され再度Resizeイベントが発生するようです。この時にセットするサイズが元のサイズみたいです。

ですので、PictureBoxのResizeイベントでImageのリサイズを行うのではなく、別のトリガーで行うべきかと思います。

どのようにImageを設定しているか分かりませんので使えるか分かりませんが、SizeModeプロパティを適切に設定するだけでやりたいことができたりしませんかね?

投稿2020/02/18 05:33

編集2020/02/18 05:42
YAmaGNZ

総合スコア10294

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

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

FM88mhmh

2020/02/18 05:59 編集

ありがとうございます。 PictureBoxのResizeイベントではなく、フォームのResizeイベントで行ったところ PictureBoxの拡大、縮小に合わせて描画サイズも変更されました。 原因はYAmaGNZさんのおっしゃるようにImageプロパティへSetを行うと、 初期のPictureBoxの値がSetされてしまうことだと思います。(挙動が記述の通りだったので) なぜそうなるのかはわかりません。 SizeModeプロパティは全て試してみましたがうまくいくものはありませんでした。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問