- PR -

子フォームへ画像を表示する方法について

1
投稿者投稿内容
naga
会議室デビュー日: 2005/10/12
投稿数: 4
投稿日時: 2005-10-12 18:21
いつも大変勉強させて頂いております。
C#初心者です。早速ですが、下記の件でご教授願いたくお願い致します。

Form:A (MDI親フォーム:IsMdiContainer→true)
Form:B (MDI子フォーム)


(1)フォームAのメニューから子フォームBを開く場合
 B f = new B();
B.MdiParent = this;
B.Show();
 と行えば良いのは知っております。

(2)フォームAのメニューバーからフォームAのピクチャーボックスに画像を表示する方法は知っています。
  private void menuItem_Click(object sender, System.EventArgs e)
  {
   if(openFileDialog1.ShowDialog() == DialogResult.OK)
   {
    Bitmap bmp = new Bitmap(openFileDialog1.FileName);
   pictureBox1.Width = bmp.Width;
    pictureBox1.Height = bmp.Height;
pictureBox1.Image = bmp;
pictureBox1.Show();
  }
}

(3)しかし、フォームAのメニュー(開く)をクリックすると画像ファイルをフォームBのピクチャーボックスに表示する方法が分かりません。大変初歩的な質問で誠に申し訳ありませんが、何卒宜しくお願い致します。

環境:WindowsXP Pro
MS Visual .net2003 C#
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-10-12 21:14
B f = new B();
B.MdiParent = this;
ここで、FormA内に作られているビットマップを、FormBに参照させればよい
B.Show();


ということでは?

たとえば、

class FormB : Form {
...
public Bitmap Image4Display;
...
}


B f = new B();
B.MdiParent = this;
B.Image4Display = new Bitmap(openFileDialog1.FileName);
B.Show();
_____________________________________________________________________________
□ Posted by Jitta on 2005/10/12
じったのノート
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006
_________________
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-10-12 21:15
引用:

(3)しかし、フォームAのメニュー(開く)をクリックすると画像ファイルをフォームBのピクチャーボックスに表示する方法が分かりません。大変初歩的な質問で誠に申し訳ありませんが、何卒宜しくお願い致します。



フォームBに「画像ファイルを表示するメソッド」をPublicで作る
フォームAからフォームBを開く
フォームAからフォームBにある「画像ファイルを表示するメソッド」を呼び出す

で答えになっていますか?

_________________
たつごろー
codeseek
こみゅぷらす
naga
会議室デビュー日: 2005/10/12
投稿数: 4
投稿日時: 2005-10-18 23:17
たつごろ様、Jitta様
ご回答どうもありがとうございました。

コメントを参考に自分の力でやろうと思いましたがうまくいきませんでした。
本当に初心者なので、差し支えなければクラスの参照方法を含めて少し詳細に教えて頂ければ幸いです。(自分も継続して勉強いたします。)

ご参考までに、下記のようにすると、フォームAの「Open」メニューをクリックすると画像選択のためのフォルダーが開かれ、任意の画像を選択するとフォームBが開きます。(当たり前かもしれませんが、空のフォームだけです。)
フォームAにはピクチャーボックスなし、フォームBにピクチャーボックス1が設定されています。

以上、よろしくお願いします


public void menuItem_Open_Click(object sender, System.EventArgs e)
{

if(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
Form2 f = new Form2();
f.MdiParent = this;

//     f.bmpImage = new Bitmap(openFileDialog1.FileName);
//   pictureBox1.Width = bmp.Width;
//   pictureBox1.Height = bmp.Height;
// pictureBox1.Image = bmp;


f.Show();
}
}
naga
会議室デビュー日: 2005/10/12
投稿数: 4
投稿日時: 2005-10-18 23:57
いつもお世話になっております。
質問に補足しますと、やりたい事は、「Photoshop」のようにファイルを開くと、選択した画像が子フォームに表示されるようにすることです。

よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-19 09:09
こんにちは、naga さん。

引用:

nagaさんの書き込み (2005-10-18 23:57) より:

本当に初心者なので、差し支えなければクラスの参照方法を含めて少し詳細に教えて頂ければ幸いです。


そうなると、実際のコードを見て頂くしか選択子がなくなりますね。

まず、Form2 (Image を表示するフォーム) に以下のように ShowImage メソッドを定義します。

コード:

public class Form2 : System.Windows.Forms.Form {

    [ Windows フォーム デザイナで生成されたコード ]

    public void ShowImage(string nFilePath) {
        using (System.IO.FileStream hStream = new System.IO.FileStream(nFilePath, System.IO.FileMode.Open)) {
            try {
                this.pictureBox1.Image = Image.FromStream(hStream);
            } finally {
                hStream.Close();
            }
        }
    }
}


Form1 (呼び出す方のフォーム) でこのように呼び出します。

コード:

public class Form1 : System.Windows.Forms.Form {

    [ Windows フォーム デザイナで生成されたコード ]

    private void menuOpen_Click(object sender, System.EventArgs e) {
        using (Form2 hForm2 = new Form2()) {
            hForm2.ShowImage(@"C:\Hoge.bmp");
            hForm2.ShowDialog();
        }
    }
}


どうでしょう?
イメージは掴めましたでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
naga
会議室デビュー日: 2005/10/12
投稿数: 4
投稿日時: 2005-10-19 10:11
じゃんぬねっと様

どうもありがとうございました。
大変に参考になりました。
今後ともよろしくお願いします。

みなさまのご教授ありがとうございました。
取り急ぎ、お礼まで。
1

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