DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Panel上のPictureBoxをスクロールさせたい。

環境/言語:[Visual Studio2005 (C#) , FW2.0]
分類:[.NET]

いつもお世話になっております。

C#は今回初めてで、PictureBoxに画像を貼り付け、
その画像をスクロールしたいのですが、うまくいきません。

下記の1, 2の方法で、それぞれスクロールと画像表示を行っております。
(DOBON.NET様のページから引用)
下記1のサンプルのように、パネル上にPictureBoxを貼り付け、
画像をImageプロパティにセットした場合は、
正常にスクロールバーが表示されるのですが、
2のように、Paintイベントを使いDrawImageメソッドを行い、
画像を表示すると、画像はパネルよりも大きいはずなのに、
スクロールバーが表示されません。
(つまり、1と2を組みあわせた場合です。)

Paintイベントを使用した場合はスクロールはできないのでしょうか?


1.「スクロールバーを付けて画像を表示する」
http://dobon.net/vb/dotnet/graphics/scrollimage.html

//Panelオブジェクトの作成
Panel panel1 = new Panel();
//プロパティの設定
panel1.Name = "panel1";
panel1.Location = new Point(8, 8);
panel1.Size = new Size(200, 200);
//スクロールバーが表示されるようにする
panel1.AutoScroll = true;

//PictureBoxオブジェクトの作成
PictureBox pictureBox1 = new PictureBox();
//プロパティの設定
pictureBox1.Name = "pictureBox1";
pictureBox1.Location = new Point(0, 0);
//画像を表示するとき、画像の大きさに合わせて
//PictureBoxの大きさが変更させるようにする
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;

//PictureBoxに画像を表示する
pictureBox1.Image = Image.FromFile(@"C:\サンプル.jpg"); ・・・※


//pictureBox1をpanel1にのせる
panel1.Controls.Add(pictureBox1);

//panel1をこのフォームにのせる
this.Controls.Add(panel1);


2.「画像ファイルを表示する」

//Bitmapオブジェクトの作成(画像ファイルを読み込む)
Image _bmp = Image.FromFile(@"C:\Blue hills.jpg");

//PictureBox1のイベントハンドラ
private void PictureBox1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
//Paintイベントハンドラで画像を表示する
e.Graphics.DrawImage(_bmp, 0, 0, _bmp.Width, _bmp.Height);
}


なお、1と2を組み合わせた場合は、1の※部分は、コメントアウトし、
2の_bmpをメンバーとし、2のPaintイベントで画像を作成します。
AutoScroll は、子コントロールが表示しきれるようにスクロールバーを表示します。
Panel の子の PictureBox のサイズが Panel よりも小さいなら、当然スクロールさせません。
PictureBox.Image を使う場合、PictureBoxSizeMode.AutoSize により大きい画像が設定されたら自動的に PictureBox のサイズが変更され、それによって Panel のスクロールバーが表示されるようになります。
しかし PictureBox.Image を使わないのなら、PictureBox のサイズの変更は自分で行わなければなりません。
■No25526に返信(Hongliangさんの記事)

> PictureBox.Image を使う場合、PictureBoxSizeMode.AutoSize により大きい画像が設定されたら自動的に PictureBox のサイズが変更され、それによって Panel のスクロールバーが表示されるようになります。
> しかし PictureBox.Image を使わないのなら、PictureBox のサイズの変更は自分で行わなければなりません。


Hongliang様
ご回答ありがとうございました。
PictureBoxのSizeModeをAutoSizeにしているので
DrawImageのときにも自動でPictureBoxがサイズ変更されると
勘違いしていました。

Paintイベント内で、PictureBoxのサイズを変更したところ、
無事にスクロールが表示されました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板