• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォーム間のデータ受け渡し2)

Visual Studio 2005のフォームアプリケーションのデータ受け渡しについて

このQ&Aのポイント
  • Visual Studio 2005のフォームアプリケーションでプログラミングを行っている場合、メインフォームとサブフォームのデータ受け渡しをどのように行えばよいか悩んでいます。
  • 起動時にサブフォームが表示されるため、まずメインフォームの上でサブフォームを表示させたいです。
  • また、サブフォームで入力されたint型やdouble型のデータをメインフォームに引き渡す方法がわかりません。どのようにプログラムすればよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんばんは。VC++を使って最近プログラムを作っているので、参考になればと思い投稿しました。それほどVC++に精通していないので的外れなことを言っていたらごめんなさい。(^^;  メインフォームからサブフォームを開いてそのサブフォームのテキストボックス等から値をメインフォームに引き渡すということであれば、以下のような方法で大丈夫かと思います。  (1)メインフォームに以下のように記述する。 subform^ ver = gcnew subform(); if(ver->ShowDialog()==System::Windows::Forms::DialogResult::OK) { *****処理を記述***** }  (2)subform側にボタン等のコントロールを用意してそのコントロールのプロパティでDialogResultをOKに設定する  (3)「処理を記述」のところに値の引渡しの処理を記述する。    例:String^ name = ver->textBox1->Text;  これでsubformで設定したコントロールを操作すればメインフォーム側でsubform側のテキストボックスの値を取得できるはずです。    

judas15
質問者

お礼

返事が遅れてすみませんです。急にPCの内部の機器がおかしくなったみたいで修理に出していました><; 私のやりたいことは、watataku70さんが記述してくれたとおりのことです。 非常にわかりやすいご説明ありがとうございます。 さっそく記述どおりプログラムを組んでみたのですが、 1.'pic::pic0::textBox3' : private メンバ (クラス 'pic::pic0' で宣言されている) にアクセスできません。 2.'pic::pic0::textBox3' の宣言を確認してください。 3.'pic::pic0' の宣言を確認してください。 といったエラーが表示されてしまいました。 1.の部分では if(p0->ShowDialog() == System::Windows::Forms::DialogResult::OK){ String^ r = p0->textBox3->Text; //r = double::Parse(p0->textBox3->text); } ここでは、ちゃんとサブフォームのコントーロール"DialogResult"でもOKと選択しています。 2.の部分では private: System::Windows::Forms::TextBox^ textBox3; 3.の部分では public ref class pic0 : public System::Windows::Forms::Form { public: pic0(void) { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // r = 0.0; } といった感じで記述しているのですが、どこか間違っている点はありますでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • フォーム間のデータ受け渡し

    現在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(); } }; }

  • 新しいフォームへのデータを渡したい

    Visual studio 2005にてフォームアプリケーションを作成しています。 メインとなるフォーム(form.vb)と、ダイアログ表示用のフォーム(dialog.vb)を使い、メインでの値をダイアログ用のフォームの方で表示させたいのです。 メインのTextBox1にテキストを入力させ、「実行」ボタンを押すとダイアログ表示用フォームが立ち上がり、ダイアログのTextBox1に同じものを表示させたい・・・という寸法です。 できるだけ簡素なコードでこれを行うにはどうすればいいでしょうか? よろしくお願いします。

  • Windowsフォームの表示

    Visual C++ 2005(Express Edition)で、windowsフォームを3個作りました。 1個目をForm1.h、2個目をForm2.h、3個目をForm3.h、メインプロジェクトは、Sample.cpp, ファイルとします。 Form1にボタンbutton1を作成し、ボタンをクリックしたイベントが発生したとき、Form2を表示させます。 Form2には、ボタンbutton2があります。 Form1と同様に、Form2のボタンをクリックするとForm3の画面が表示されるようにします。 ところが、以下のソースファイルで書いたところ、Form2とForm3は、名前空間に存在しませんという意味のエラーが生じます。 Form2とForm3をインスタンス化し、Show()メッソドで、画面を表示させる方法です。 しかし、Form1とForm2だけのファイルですと、先のソースの書き方で上手くいきます。 何か、書き方が異なるのでしょうか?正しい書き方を教えてくださいますとありがたいです。 なお、C++/CLIの文法に沿った、ソースコードでお願いします。 <ソースファイル> ----Form1.h----------------------------- #pragma once #include "stdafx.h" #include "Form2.h" #include "Form3.h" namespace Sample { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Form1 の概要 /// /// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた /// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを /// 変更する必要があります。この変更を行わないと、 /// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、 /// 正しく相互に利用できなくなります。 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { //button1を作成 //省略 #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Form2^ a = gcnew Form2(); a->Show(); } }; } [EOF] --------------------------------------- ----Form2.h---------------------------- #pragma once #include "Form1.h" #include "Form3.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 Sample { /// <summary> /// IsotopeInput の概要 /// /// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた /// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを /// 変更する必要があります。この変更を行わないと、 /// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、 /// 正しく相互に利用できなくなります。 /// </summary> public ref class Form2 : public System::Windows::Forms::Form { //button2を作成 //省略 } #pragma endregion private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { Form3^ b = gcnew Form3(); b->Show(); } }; } [EOF] --------------------------------------- -------Form3.h-------------------------- #pragma once #include "stdafx.h" #include "Form1.h" #include "Form2.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 Sample { /// <summary> /// Result の概要 /// /// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた /// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを /// 変更する必要があります。この変更を行わないと、 /// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、 /// 正しく相互に利用できなくなります。 /// </summary> public ref class Form3 : public System::Windows::Forms::Form { //省略 } #pragma endregion }; } [EOF] --------------------------------------------------------- Sample.cpp----------------------------------------------- // Sample.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include "Form1.h" #include "Form2.h" #include "Form3.h" using namespace Sample; [STAThreadAttribute] int main(array<System::String ^> ^args) { // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); return 0; } [EOF] ------------------------------------------------------------

  • Access2003においてフォームとフォームでのデータの受け渡し

    生徒が新たに検定試験を受ける際、誰がどの検定試験を受験するかを登録する受験者登録フォームがあります。入力をするときに、生徒テーブルを作ってあるので、そこから、入力画面にデータをもってきたいのです。500名ほどいるので、ふりがなをもとに検索をかけます。それが、生徒検索フォームです。フォームヘッダーにふりがなを入力するテキストボックスをつくり、その下に、検索結果を表示するようになっています。検索結果を表示できたら、それをダブルクリックすると、受験者登録フォームにダブルクリックしたデータが入るようにしたいのですが、それが分かりません。サブフォームからメインフォームに受け渡す方法は過去のものにあったのですが、まったく別のフォームに受け渡しをしたいのですが、宜しくお願いいたします。

  • VC++2010について

    Windowsフォームアプリケーションを勉強し始めています。 Formに表示するだけの簡単なプログラムを打ち込んでみたのですが、ソリューションのビルドをしてみると、次のような2つのエラーが出ました。(実際にはもう一つあるのですが、それはintからfloatに変換されているというだけ) C1003.cpp(6): error C2143: 構文エラー : ';' が 'using' の前にありません。 C1003.cpp(19): fatal error C1075: 左側 中かっこ '{' に対応するものが 'g:\admin\visual studio 2010\projects\vc石立\c1003\c1003\Form1.h(3)' で見つかる前に EOF が検出されました。 こちらが入力したのは、Formに関するプログラムだけで、メインプログラム(.cpp)は一切変更してません。また、簡単なプログラムを何個か打ち込んでみたのですが、同じ二つのエラーが出ます。Formに関するプログラムの記述が間違ってるとも思えません。 その上、usingの前の行に” ; ”を入れてやると、一つ目のエラーは消えました(その前はinclude文)。おまけに、メインプログラムの最後の行(19行目)に” } ”を入れると、二つ目のエラーも消え、正常にビルドされ、デバックもできました。 解決はしたのですが、キツネにつままれたようです。いざ、無料でVCが手に入ると聞きつけ、喜び勇んで勉強しだしたのに…これからも同じ修正をしなくちゃと思うと、うんざりです。 コンソールアプリケーションは、問題なく動きます。 何か、心当たりのある方はいませんか? なお、打ち込んだのは、次の命令(2行目から)だけです。 #pragma endregion private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) { } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { double a=double::Parse(textBox1->Text); double b=double::Parse(textBox2->Text); int iNum=comboBox1->SelectedIndex; double c; switch(iNum){ case 0:c=a+b;break; case 1:c=a-b;break; case 2:c=a*b;break; case 3:c=a/b;break; }

  • メインフォームとサブフォームについて

    こんにちは。 VBを勉強中の初心者です。 今メインとして使っているフォームをForm1とします。 サブとして使っているフォームをFrom2とします。 プログラムの実行時にForm1がでてくるのですが、 Form1を起動せず、Form2を起動したいです。 (メインフォームとサブフォームを入れ替えたいです) この場合はどうすればいいでしょうか? よろしくお願いします。

  • C++2012でのフォーム切替

    いつも御世話になっております。 現在C++2012EXPRESSを使用し勉強を始めたばかりのものです。 早速質問なのですが、フォームの切替の仕方がわからず困っています。 #pragma once #include "Frm_Manual.h" ←追加 private: System::Void cmd_Manual_Click(System::Object^ sender, System::EventArgs^ e) { Frm_Manual^ form = gcnew Frm_Manual(); form->Show(); } 上記で追加したフォームを開く 上記の方法で追加したフォームを開くことが出来ました。 同様に追加したフォームからFrm_Mainを開きたいので #pragma once #include "Frm_Main.h" ←追加 private: System::Void cmd_Main_Click(System::Object^ sender, System::EventArgs^ e) { Frm_Main^ form = gcnew Frm_Main(); form->Show(); } とするとエラーが15個も発生してしまいます。 エラーはC2065,C2061,C2227の三種類です。 どこかでFrm_Main.hをインクルードする必要があると思うのですがどこに記入すればよいのかわかりません。 ネット検索もしたのですが、2つのフォームを交互に開くプログラムは検索できたのですが、現在行いたい処理は、フォームを5個作成し、切り替えるプログラムです。 VBでは簡単に出来たので、安易に考えていましたがつまいづいてしまいました。 よろしくお願いいたします。

  • サブフォームのデータをメインフォームへ

    お世話になります。 ひとつお聞きしたいのですが、サブフォームのデータをメインフォームに表示させる方法ってないのでしょうか? データシートのサブフォームで計算させた合計の値を、メインフォームにもテキストボックスを表示させたいと思っています。 できるかどうかわかりませんが、何かいい方法がございましたら、よろしくお願いいたします。

  • フォームの値をレポートに反映させるには

    お世話になります。 Access2002のフォームとレポートについてご教授ください。 それは、サブフォームをデータシートにしてサブフォームの中の計算の合計をメインフォームのテキストボックスに反映させるために、=Form![サブフォーム名]![合計]として、サブフォームのヘッダーに一時値を待機させといて、その合計値(サブフォームの合計値)をメインフォームに反映させています。(サブフォームの合計値も計算式をコントロールソースに入力:[単価]*[数量]) そして、メインフォームの値をレポートに反映させて印刷をかけたいのですが、どの様にしたらいいのかわかりません。。。 何かいい方法がございましたら、ひとつよろしくお願いいたします。

  • フォーム2つを並列処理

    フォーム1に配置されたボタンをクリックすると、フォーム2とフォーム3が起動します。 フォーム2、フォーム3共に配置されたテキストボックスを同時に制御したいのですが、 どうしたらいいのかわかりません。 フォーム2のコード途中にテキストボックスに「テスト」と記入するコードがあります。 ----------------------------------------- TextBox1.Text = "テスト" Form2.TextBox1.Text = "テスト" ----------------------------------------- これで実行してみたのですが、Form2には繁栄されるのですが、Form3には繁栄されません。。。

このQ&Aのポイント
  • ブラザー製品のMFC-J700Dで印刷ができない際に表示されるエラーメッセージ「印刷できません4F」の解決方法について教えてください。
  • お困りの内容やトラブルの経緯、試したことなどを具体的に教えてください。印刷できない原因の特定に役立ちます。
  • 質問者の使用環境や接続方法、関連するソフト・アプリ、電話回線の種類についても教えていただけると、より具体的な回答ができます。
回答を見る

専門家に質問してみよう