フォーム間のデータ受け渡し
現在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();
}
};
}
補足
#define null OL private: static Form2^ _instance; public: _property Form2^ get_Instance() { if(_instance == null || _instance->get_IsDisposed()) _instance = gcnew Form2(); return _instance } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Form2->get_Icstance->show(); } 上のように 教えてもらったのを書いてみたんですが… 構文エラー : ';' が、識別子 'Form2' の前に必要です。 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 'OL' : 定義されていない識別子です。 'get_IsDisposed' : 'form多重起動防止::Form2' のメンバではありません。 構文エラー : ';' が '->' の前にありません。 構文エラー : ';' が '->' の前にありません。 このようにエラーが出てしまいました。 どこかまだおかしいところがあるのでしょうか?