• 締切済み

VC++2005 Form1とForm2のデータのやりとり

現在VC++2005でプログラムをしています。 そこでForm1で表示されているテキストボックスの中身をForm2のテキストボックスに表示するのはどのようにすればよいのでしょうか? ちなみに、Form2の表示は下記のプログラムで行っています。 ―Form1.hの内容― #include "Form2.h" Form2^ newMDIChild = gcnew Form2(); newMDIChild->Show(); ―Form2.hの内容― this->Hide(); というので表示を消しています。 初歩的な質問だと思いますがよろしくお願いします。

みんなの回答

回答No.2

 こんにちは。補足頂きました。  フォーム1のテキストボックスの内容を向こうへ丸ごと反映させたいのでしょうか。  でしたら、フォーム1のテキストボックスのテキストを以下の様に渡してあげれば良い筈です。   newMDIChild->PostText(textBox1->Text);  上記の実行結果  フォーム1のテキストボックスが"Post Me"  フォーム2のテキストボックスが不明(色々)  であれば  フォーム2のテキストボックスは  Post Me  に成ります  フォーム2のテキストボックスにも、何か文字有って、其れに対して追記と言う形を取りたければ、  フォーム2のPostTextメソッドを  public: System::Void PostText(System::String^ text)  {   textBox1->Text += "\r\n";//←改行したくなければ書かなくて良い   textBox1->Text += text;  }  の様に改良してフォーム1から  newMDIChild->PostText(textBox1->Text);  の様に呼び出せば  上記の実行結果  フォーム1のテキストボックスが"Post Me"  フォーム2のテキストボックスが"Hello Text"  であれば  フォーム2のテキストボックスは  Hello Text  Post Me  に成ります。  改行しない場合は  HelloTextPost Me  に成ります。

回答No.1

 こんばんは。  送るだけならば簡単です。  フォーム2に以下のメソッドを追記して、  public: System::Void PostText(System::String^ text)  {   textBox1->Text = text;  }  フォーム1の何処かで、  newMDIChild->PostText("Post Me");  と呼びだせば、文字列を送り届けれます。  しばしば上がる質問です。以下も併せて拝見して見て下さい。  http://oshiete1.goo.ne.jp/qa4549062.html  http://oshiete1.goo.ne.jp/qa4510669.html

xxmajimaji
質問者

補足

ご教授ありがとうございます。 プログラムを作ってみたところ、エラーなどは出ずに解決はできました。 しかし、newMDIChild->PostText("Post Me");という部分のPost Meが表示されてしまいます。 Form2では、すでに表示されているところ表示したいのですがどのように変更すればよいのでしょうか?

関連するQ&A

  • form2 から form1に戻ったとき、form1のTextboxの内容を消したくないのですが

    .NETのBasicでform1からform2に移行するため Dim F2 As New Form2() Me.Hide() F2.Show() この後、form1にもどるため Dim F1 As New Form1() F1.Show() Me.Hide() 上記のように書くと、form1のTextboxの内容が消えてしまいますよね。 これを消さずにまたform1のTextboxの編集が続けられるようにしたいのですが、どうすればいいでしょうか ただ単にform1を見えなくする方法が違うのでしょうか 初歩的な質問ですいません。

  • C#でのForm間のデータ受け渡し、保存について。

    C#でシステム作成をしています。WindowsFormApplicationです。 どのようなシステムかと申しますと、学習システムです。 親フォームForm1には、問題ページForm2へ行くボタン、保存ボタン、開くボタンが配置されています。 問題ページForm2へ行くと、数十個の数字labelがあり、この各labelから実際の問題へ、つまり、Form3、Form4、…と行きます。 さらにForm3、Form4、…の各問題を終える度に、Form3、Form4…からその都度別Forms(集計のsとしておきます。)を開いて集計していきます。(数値を扱うので。) Form1からForm2は同時表示、Form2のlabelからのForm3、4…はForm2をHideして表示(Hideについては後述)、Form3、4…からFormsは、もちろん3、4を参照しながら集計するので同時表示です。 Form2のHideについては、例えばForm3の問題を解き、Formsを開いて集計したなら、Form3をCloseすると、Form2を再度ShowしてForm3へのlabelのForeColorを変化させます。同時にFormsはHideします。(また次のForm4で使うため。)変色labelを再度押すと、「解答済みです」とMessageBoxに表示して行けなくなります。 このように進めていくタイプのシステムを作成しています。 以上まではうまくいきました。 ここからが問題です。 Form2のlabelの色は、Form2を閉じない限りはもちろん保持されます。しかし、閉じて再度Form1から表示すると色が保持されているプログラムを書きたいのですが、どのようにすればいいでしょうか? ちなみにHideではだめだと思います。なぜなら、初めてこのシステムに取り掛かる際、Form1からForm2を表示する時に、HideされたForm2はまだ存在しないからです。 だからデータの受け渡し、つまり、Form2を閉じる時にForm1へデータを渡し、再度開く際にForm2へそのデータを返す、というイメージですかね。 インターネット上では、テキストボックスのテキストデータの例ばかりでしっくりきません。 渡すとしてもForm1のどこに渡すのか(どこにプログラムを?)も分かりません。 Form2から受け取る際は、Loadイベントでしょう。Form2から渡す際はClosedイベントで渡すとは思いますが…。 そしてあと一つ、Form1の保存ボタン、開くボタンのプログラムです。 学習システムで少しずつ進めていくプログラムですから、この日はここまで、と保存していく必要があります。 それを開く意味で、開くボタンも付けています。 このプログラムも難しくて分からないところですが、これも質問すると質問が多くなるため置いておきます。(というより先述の受け渡しのプログラムの質問が優先です。) 質問は、このシステムのForm1から保存することで、きちんと進度は保存されるかということです。 ある日、あるところまで問題を解き(labelの色を変え)、集計し終えたとします。 そして保存して、別の日に開くとForm1が現れます。 このForm1からForm2へ行くと、ちゃんと色が保持されたプログラムは書けるでしょうか? (ちゃんとデータの受け渡しプログラムを書いたと想定。要はlabelの変色のみ保存できればいいのです。) そしてFormsへ飛ぶと、データは保持されているでしょうか? Formsは先述しましたが、集計し終えるとHideするのみです。つまりFormsは初めて表示したらもうCloseはしません。 このようにHideしたFormの状態も保持することはできるでしょうか?

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

    Visual Studio 2005のフォームアプリケーションでプログラミングを行っているものです。前回と似たような質問になるのですが、微妙に状況が違っていてどうしてよいのかわかりません。まず、メインフォーム(Form1.h)でサブフォーム(pic0.h)を呼び出しているのですが、プログラムを見てお分かりのように起動時に呼び出ししているので最初に子フォームのpic0.hが現れます。この子フォームを消すことでメインフォームが現れるといった感じになっています。私がしたいことは、まずメインフォームの上でサブフォームを表示させ(メインフォームが表示された後にサブフォームが表示されてほしい)、さらにpic0.hでテキストボックスによる入力や出力で取得されたint型やdouble型のデータをForm1.hに引き渡すことです。以下がプログラムなのですが、どのようにプログラムしていいのかお分かりの方がいましたら御教授お願いします。 /*** メインフォーム(Form1.h) ***/ #pragma once #include "pic2.h" #include "pic0.h" // 省略 // #pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { pic0 ^p0 = gcnew pic0(); //起動時呼び出し p0->ShowDialog(this); } /*** サブフォーム(pic0.h) ***/ #pragma once // 省略 // #pragma endregion praivate int a,double b; a = double::Parse(textBox1->Text); //例1 b = double::Parse(textBox2->Text); //例2 // 省略 // /*** pic0.cpp ***/ #include "StdAfx.h" #include "pic0.h" #include "Form1.h" using namespace pic;

  • VC++でラベルに表示できない[.NET]

    VC++でラベルに表示できない[.NET] 以下のプログラムですがエラーが出ます。 #include "stdafx.h" #include "Form1.h" using namespace CursorXY1; [STAThreadAttribute] int main(array<System::String ^> ^args) { static POINT Point; // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); label1->Text="これはラベルです"; return 0; } エラー内容: 1>.\Form1.cpp(27) : error C2065: 'label1' : 定義されていない識別子です。 1>.\Form1.cpp(27) : error C2227: '->Text' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。 1> 型は ''unknown-type'' です。 ヘッダーファイルに「Form1.h,resource.h,stdafx.h」があります。 Designerでlabel1を設置しました。 Windowsフォームアプリケーションを選択しました。 初心者ゆえにずっとつまいずいていて、このたび質問させていただくことになりました。 よろしくお願いします。

  • unloadの使い方

    iniファイルの内容を読み込んで表示・書き換え・再表示をする ミニプログラムを作っています。 (1)Form1でiniファイルの内容をForm1.textに表示させる。 (2)Com1でForm2に遷移。 (3)Form2.textに書き換え内容を入力、Com2で書き換え、Form1に遷移。 Form1.textには書き換えられた内容が表示されている…という結果を出したいのですが、 Com1に    Form2.show    Form1.hide と書いていた為、値の再表示が出来ませんでした。 そこで    Unload Form1    Form2.show と書いてみると、プログラムが終わってしまいました・・・。 順序を逆にしても同じ結果です。 Form1.textだけ、もしくはForm1全体を プログラムを終了させることなくunloadする方法がありましたら 教えてください。

  • C++ 変数の参照について

    お世話になります。 C++を勉強し始めて間もない者ですが、宜しくお願いします。 Form1.hとForm2.hを作成し、Form1からForm2を表示するところまで作成し、Form2からForm1の変数の参照や操作を行いたいのですが、 (Form1.h) #include "Form2.h" public: int i; Form2^ frm2 = gcnew Form2(); frm2->ShowDialog(); (Form2.h) #include "Form1.h" Form1^ frm1; this->Text = frm1.i.ToString(); の様な処理を行うにはどうすれば良いでしょうか。 お手数おかけしますが、ご教授宜しくお願いいたします。

  • VC++2005 StreamReader

    以前、ここでテキストボックスに保存してあるテキストファイルの表示方法を教えていただきました。 そのときの回答では、読み込みたいファイル名をまずテキストボックスに入れてStreamReaderを使って他のテキストボックスに表示するというプログラムを教えていただきました。 そこで今回質問したいことは、最初にファイル名をテキストボックスに入れずにファイルを表示するのはどうすればよいのかということです。 以下に現在使っているプログラムを書きます。 よろしくお願いします。 textBox1->Text = "p12.txt"; ←この部分について StreamReader^ streamReader = gcnew StreamReader(textBox1->Text); textBox2->Text = streamReader->ReadToEnd();

  • vc++子ウィンドウにおけるTimer動作について

    visualc++2008について。 Form2^ form12 = gcnew Form2(); form12->Show(); の記述で子ウィンドウを表示させるところまでできたのですが、その子ウィンドウでキッチンタイマーの動作をさせようと考えています。がTimer_tickが動作しません。 ShowではなくRunじゃないかとかいろいろ考えてやってみたのですが、ことごとくエラーでした。 Timerの動作部分TickにはTimer_tickを紐付けしてあります。 Timer動作もTureで、記述コードもとりあえず this->label1->Text = DateTime::Now.ToString("HH:mm:ss"); でまず、動作しているかの確認を行っています。 わかる方ご教授お願いします。

  • VC++2010を覚えたい(極めたいではない)

     ExcelVBAで実験データを整理していますが、Excelのみでしか使えない等の問題からVC++2010をそこそこ使えるようになりたいのです(極めようとまでは思っていません)。先日もここで質問させていただいたのですが、メッセージボックスを出したりファイル操作をしようとすると、知識不足のためコードが正しく書けずエラーばかり出て格闘しています(VBAだと、msgbox"こう書けば表示される" の一行で済むことをやるのに、かなり格闘します)。  そこで、これら基本動作を完全に使いこなせるようにするために勉強をしたいのですが、何について勉強すればいいのかよくわかりません。どんな本を買って何を勉強すべきでしょうか?いい本があったら教えてください。特にできるようになりたいことを下に書きます。 1 #include <stdio.h>とかのインクルードファイルを宣言する位置。 2 intやdouble等の変数宣言も、たまにエラーでできないことがある。   関数内では変数宣言の方法が違うのかな?   String^ でどうして^がついたりつかなかったりするかわからない。   これでエラーとかよく出ます。^は大嫌い>< 3 メッセージボックスとかの表示。messageboxの前や後ろにshowとか::とかどうして必要か   わからない。メッセージボックスに確認する変数の数値を出すのも難しい。 4 データファイルをいろいろ操作したい。データファイルはテキストデータのみ 5 グラフもVC++で書けるとうれしい。必要があるときだけでいい。 forやif等の制御構造、配列、ポインタ等はもう知っています。 これらができるようなるには、「クラス」とかを勉強するとわかるのでしょうか? クラスが何のことだかもわかりませんが。

  • (VB2008EEです)Form1からForm2をモーダレスで表示(S

    (VB2008EEです)Form1からForm2をモーダレスで表示(Show(Me))したのち、 Form2を、(Form2の)閉じるボタン(右上にあるXボタン)で閉じるときに、 単にHideするだけの処理に変更することは可能でしょうか。 デフォルトでは、閉じるボタンですと、Close()と同様、 Close(&Dispose)となると思いますが、Hide()処理に 変えられるかということです。 。。。 試しに、FormClosingイベントハンドラでHide()→e.cancel=Trueって やってみたところ、(再度同じForm2のインスタンスを使ってShowができ、 さらに前回のText表示などが残っているなど)その場はうまく行ったように 見えたのですが、そうすると、アプリ(Form1)が閉じるボタンで終了しなくなって しまいました。 (Application.Exitでもダメ、Endでは(強制終了とのことなので)OKですが) Form2のClose処理をCancelしているからだ、とは思いますが。 ShowDialog→Xボタン(同じ記述のまま) の後では、終了可能です。 では、Show→Xボタンのあとで、同じインスタンスで、上記と同じように、 ShowDialog→Xボタンとしたあと、Form1のXボタンでアプリを 終了させようとするとどうなるか。 結果は、終了不能でした。 一度Show→Xしたらそれをどこかに覚えている?ってことなのでしょうか。。。 ここらへんの現象まで、合わせて説明できる方がいらっしゃったら 合わせてご説明いただけませんでしょうか。 。。。 なお、なぜこんなことするの?という実際論はここではなしで 純粋に技術論でお願いいたします。

専門家に質問してみよう