フォーム間のデータ受け渡し
現在VIsual Studio 2005のフォームアプリケーションを使ってプログラミングしています。ボタンを押すことで新たな子フォームを作成し、親フォームから子フォームへグローバル関数で宣言しているbmp[],picture[],red[]などのデータを渡したいのですがどうすればいいのかわからず困っております。子フォームから親フォームへテキストボックスなどの値を渡す方法などはわかったのですが、それをどう応用していいのかもわからない状況です。最終的には親フォームのbmp[0]におけるred[0]が1(画像処理されている)なら子フォームでbmp[0]を表示させたいと思っています。わかる方がいましたらどうかご教授ください。よろしくお願いします。以下がプログラムとなっております。
*** 親フォーム ***
#pragma once
#include "pic2.h"
namespace pic {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::IO;
// 省略 //
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
bmp = nullptr;
Array::Resize( bmp, 20 );
Array::Resize( picture, 20 );
Array::Resize( bmpr, 20 );
this->red = gcnew array<int>(20);
}
// 省略 //
private: System::Windows::Forms::PictureBox^ pictureBox1;
private:array< Bitmap^>^ bmp; // 原画像格納 //
private:array< Bitmap^>^ bmpr; // 処理画像格納 //
private:array< PictureBox^>^ picture;
private:array< int>^ red; // 処理:1 不処理:0 //
// 省略 //
#pragma endregion
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
bmp[0] = gcnew Bitmap("ファイル名",true);
}
private: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e) {
pic2 ^p2 = gcnew pic2();
p2->ShowDialog(); /* ボタンを押すことで新たなフォーム作成 */
}
private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) {
int x,y;
int w = bmpr[0]->Width;
int h = bmpr[0]->Height;
if(red[0] == 1){
bmp[0] = gcnew Bitmap("ファイル名",true);
pictureBox1->Image = bmp[0];
red[0] = 0;
return;
}
if(red[0] == 0){
// 画像処理 //
pictureBox1->Image = bmpr[0];
red[0] = 1;
}
}
};
*** 子フォーム ***
#pragma once
//#include "Form1.h"
#include "pic3.h"
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
namespace pic {
/// <summary>
/// pic2 の概要
///
public ref class pic2 : public System::Windows::Forms::Form
{
public:
pic2(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
}
// 省略 //
}
#pragma endregion
private: System::Void pic2_Load(System::Object^ sender, System::EventArgs^ e) {
if(親フォームのred[0]==1ならば){
pictureBox1->Image = bmp[0]
}
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
// 新たな子フォームpic3作成 //
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
this->Close();
}
};
}
お礼
返信が遅れてすみません。 パラメータの件はうまくいきました。ありがとうございました。 また、エラーの件ですが、詳細は良くわからないのですが、 コンパイル環境が原因でエラーが起きていたみたいです。 お騒がせして申し訳ありませんでした。 これからもよろしくお願いいたします。
補足
質問が間違っていました。コンストラクタでのパラメータの取得のイメージであっています。Loadイベントは間違いでした。 ただ、実際に実行しようとすると以下のようなエラーが出てしまいました。 ↓以下エラー 「'System.ArgumentNullException' のハンドルされていない例外が mscorlib.dll で発生しました。 追加情報: 値を Null にすることはできません。」 これはどこの情報を修正すればよいでしょうか? 実際のコードでは //引数(a,b) Form2 f = new Form2(a,b); の部分を //引数(2,1) Form2 f = new Form2(2,1); としていますが、何か問題がありますでしょうか?