- PR -

PictureBoxについて

投稿者投稿内容
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-26 09:29
いつもお世話になっております。
今回はPictureBoxについてお聞きしたいです。

PictureBoxで画像を表示するようにしているんですが、
PictureBoxより画像のサイズが大きくなってしまった場合に
PictureBoxに画像サイズをあわせるのではなく、スクロールをつけて
表示させたいと考えているのですがそれは可能でしょうか???

あと、PictureBoxを使ってペイントみたいなアプリを作成しようとしているんですが、
線の描画がいまいち微妙です。
PictureBoxの上には描画できるんですが、
「戻る」とか出来ないようなつくりなんです^^;(直接書いてるので)
何かいい方法はないのでしょうか???

何かいいアドバイスがあれば教えてください。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-04-26 10:08
試していませんが、

PictureBox.SizeMode = PictureSizeMode.AutoSize にすれば
PictureBox のサイズが画像のサイズと等しくなるはずです。
で、スクロールを PictureBox のコンテナにつければ
(Panel の場合、AutoScroll を設定)、スクロール表示可能ではないでしょうか。

描画に関しては、PictureBox に直接描画するのではなく、
描画クラスを用意してリストに格納しておき、
PictureBox.Paint で各要素を描画するようにすると可能です。
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-26 10:54
返信どうもありがとうございます。

まだ何も試していないのですが、一つ質問です。
描画クラスってのは自分で作成するんですよね???
どう作成すればいいのか書いていただけるとうれしいです。
一から十まで聞いてる感じで申し訳ないです。。。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-04-26 11:14
たとえば、
コード:
public abstract class DrawElement {
 public abstract void Draw(Graphics g);
}

public class Line: DrawElement {
 private Pen pen;
 private PointF from;
 private PointF to;

 public Line(Pen pen, PointF from, PointF to) {
  this.pen = pen;
  this.from = from;
  this.to = to;
 }

 public override void Draw(Graphics g) {
  g.DrawLine(pen, from, to);
 }
}

VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-26 11:22
返答ありがとうございます。

これって例えば「マウスが押されている間線を描く」って場合。
クリックされる前まで戻るとか処理大変じゃないですか???
直線ならいけそうな気がしますが。

あとスクロールなんですが、やってみたんですが
いまいちやり方がわかりません。
panelってどうやって使うんですが???

自分のやり方がきっと悪いんですよね^^;
なにか簡単?いい方法があればご指導ください。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-04-26 11:36
応用部分は自分で考えましょう。

Panel ですが、使い方がわからないというのであれば、今まで Form に
PictureBox を貼っていたのだと推測します。
その代わりに Panel を貼り、サイズなどは PictureBox に指定しようと
していたものを使用します。
で、その Panel の AutoScroll プロパティを True に変更します。
Panel の上に PictureBox を貼り、Location を (0, 0)に変更します。
これで、PictureBox が大きくなったら(前述のとおり、SizeMode=AutoSizeなら
そうなるはず)、Panel に自動的にスクロールバーが表示されます。
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-26 11:41
返信ありがとうございます。

スクロールはできました^^;
何度もすいませんでした。

panel1.Controls.Add(pictureBox1);

このようにしてコントロールを追加したんですが、
今までできていたpictureBoxでしていた描画処理ができなくなってしまいました。
これってpictureBox.Paint?でできますか???
VitaminLemon
常連さん
会議室デビュー日: 2005/04/08
投稿数: 40
投稿日時: 2005-04-26 12:18
何度もすいませんです。

pictureBoxに描画することはできました。
もう一つ聞きたいのが、
パネルの中のpictureBoxで左クリックしている時に線を描くってアプリを作成。
そのときにそのままパネル外(スクロールバーで移動しないと表示されない範囲)
にそのまま移動したときにスクロールが自動で移動するようにするのって
自分で無理やりかかないとむりっすよね?^^;
簡単な方法があれば教えていただきたいです。

スキルアップ/キャリアアップ(JOB@IT)