• ベストアンサー

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

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

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

ダイアログがモーダル表示ならShowDialogをモードレスならShowをオーバーロードしてみましょう Dailog1というフォームなら Public Overloads Function ShowDialog( sText as String ) as DialogResult   Me.TextBox1.Text   return MyBase.ShowDialog() End Function Public Overloads Sub Show( sText as String)   me.TextBox1.Text = sText   MyBase.Show() End Sub といった具合にします 呼び出し側では Dailog1.Show( TextBox1.Text ) または Dialog1.ShowDialog(TextBox1.Text) といった具合にします

その他の回答 (5)

回答No.5

動かすだけなら・・・ Private Sub 表示ボタン_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 表示ボタン.Click Dialog1.TextBox1.Text = Me.TextBox1.Text Dialog1.Show() End Sub これでいけるはず。 ただし、No2さんの言っているようにモジュール設計的には 推奨できませんね。

  • ttkai00
  • ベストアンサー率58% (18/31)
回答No.4

私の先の回答の意図が全く伝わっていないようです… > Form1の方に > Dim member As String = Form2.TextBox1.Text > Form2の方に > Dim member As String > TextBox1.Text = member 基本的なところから勉強した方が良いように思います。変数・クラス・プロパティといった概念を正しく理解されていればこんなコードは出てこないはずです。この場合、Form2 で宣言した member と Form1 で宣言した member は全く別物ですから、設定した TextBox1.Text が Form2 の Load で空の文字で上書きしてしまうことになります。 この書き方をするのであれば、Form2 の方で何も設定しなければ動作はすると思います。ただしこれは私の意図したコードではありません。 Form2 の持ち物である TextBox1 のプロパティを Form1 側から設定するのは設計上あまりよろしくありません。そこでプロパティを使う方法を紹介しました。 私が意図していたのはこういうコードです。 [Form1] ' ダイアログを表示する箇所 Using frm As New Form2() frm.TextBoxText = Me.TextBox1.Text frm.ShowDialog() End Using [Form2] ' プロパティの宣言 Private _textBoxText As String Public Property TextBoxText() As String Get Return _textBoxText End Get Set _textBoxText = Value End Set End Property ' --- 以下はForm_Load 内に記述 --- Me.TextBox1.Text = TextBoxText

回答No.3

方法がわからないというのはどこの部分がわからないのですか? メインフォームからダイアログを表示させる部分がわからなのでしょうか? それともダイアログのTextBox1に値を表示する方法がわからないのでしょうか?

mobsquad08
質問者

補足

ご回答ありがとうございます。 ダイアログの表示はできるのですが、そのダイアログのTextBoxに文字列を表示する方法が分からないのです。

  • ttkai00
  • ベストアンサー率58% (18/31)
回答No.2

いろいろ方法はありますが、ダイアログのフォームのクラスに TextBox1 に表示する文字列という意味合いのプロパティを作ってやるのが普通だと思います。 呼び出し側は ShowDialog の前にそのプロパティを設定して、呼び出される方は Load イベントで TextBox1 にその値を設定します。

参考URL:
http://support.microsoft.com/kb/308230/ja
mobsquad08
質問者

補足

Form1の方に Dim member As String = Form2.TextBox1.Text Form2の方に Dim member As String TextBox1.Text = member と書いてみましたができませんでした。。。

回答No.1

ためしにサンプル作成してみて、その内容に対して「これよりもいいほうほうがありますか?」と質問してみたほうがよいかと。 見方によっては問題の丸投げとも見えますよ。

mobsquad08
質問者

補足

すいません、方法自体が分からなくて、サンプルが作れないんです。

関連するQ&A

  • フォーム間のデータ受け渡し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;

  • 特定のフォームだけ別フォームからの参照がされません

    VB 2005,Framework2.0を使用しています。 現在、サブフォームからダイアログフォームを表示し、ダイアログフォーム内の入力値等をサブフォームに渡す処理を行っています。 サブフォームは複数作成しており、特定のサブフォームだけダイアログフォームの入力値がサブフォームに渡されず原因が分からなくて困っています。 コードは以下のような形で書いています。 'サブフォーム Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Dialog1 f.StartPosition = FormStartPosition.CenterParent f.ShowDialog() End Sub End Class 'ダイアログフォーム Public Class Dialog1 Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click Form1.Label1.Text = Textbox1.text Me.Close() End Sub End Class 2005では、別フォームからの参照はVB6と同じようにインスタンスを作成しなくても参照できる様になったと聞いていますので、上記のコードでも参照方法として問題はないと思うのですが、うまく動作しない原因が分かる方が居られましたら宜しくお願いします。

  • Visual C♯ フォーム間での値の受け渡し

    Visual C♯ フォーム間での値の受け渡しについて プログラミング初心者です。 今、勉強中なのですが、試行錯誤しても出来なかったので助けていただければと思います。 現在Visual C# 2008を使っております。 フォーム間の値の受け渡しについて、助言をお願いします。 [Form1] ・TextBox1 ・Button1 [Form2] ・TextBox2 ・Button2 1.Form1のButton1をクリックし、Form2を出す。 2.Form2のtextBox2に文字を入力し、Button2をクリックする。 3.Form1のTextBox1に、Form2のtextBox2に入力した文字を表示する。 という、作業をしたいのです。 できればソース付きで教えていただけると助かります。 よろしくお願いします。

  • フォーム間での値の受け渡し

    プログラミング初心者です。 急な親の転勤で海外に行くことになって、全く言葉が通じない小学生並みに、私も言語がわかりません…。 現在Visual C# 2008でシステムの開発に携わっています。 フォーム間の値の受け渡しについて、助言をお願いします。 ネットで色々調べたのですが、小難しくて理解できませんでした。 [Form1] ・TextBox2 ・Button1 [Form2] ・TextBox2 1.Form1のTextBox1に値(文字)を入力して、Button1をクリックする。 2.Form2のtextBox2にTextBox1に入力された値(文字)が表示される。 という、作業をしたいのです。 できればソース付きで教えていただけると助かります。 よろしくお願いします。

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

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

  • データの受け渡し

    VB.NETでテキストで入力した値を検索画面のテキストで表示していて、 検索されている状態にしたいのですが。 検索画面のほうはdllから読み込んでます。 画面:フォーム 検索画面:クラスライブラリ 画面からTextBoxの値は読み込めるのですが、データが表示できません TextBoxで入力した値:2 検索画面で表示されているデータ 1 あ 2 い 3 う 1.TextBoxで2を入力 2.検索ボタン押下で開く 3.検索画面に2が表示されていてコード2のデータが表示されている (2 い)

  • VBの各種フォーム表示について

    ご質問です。フォームに関してですが、各種フォーム表示について 疑問があります。 まずFrom2には Dim frm2 As New Form2 frm2.Show() 等で表示する事が可能ですが、 "Explorer1.vb","LoginForm1.vb","AboutBox1.vb","TextFile1.txt" "Dialog1.vb"等の表示はどの様なコードですか? googleで検索しているものの、1ヶ月経ち全然見つかりません。 是非お教え下さい。 (VB2008使用)

  • C#でテキストボックスをクリック→フォームが開く→フォームで設定した値

    C#でテキストボックスをクリック→フォームが開く→フォームで設定した値を元のテキストボックスに入力 こんな感じのことをC#でやりたいのですがよくわからないので教えてください。 1. 親をForm1、子をForm2とします 2. Form1のTextBox1をクリックするとForm2が開いきます 3. Form2で設定した値をForm2の「入力」ボタンを押すとForm2が閉じてTextBox1に値が入力されます というものです。 ここで、textBoxは「クリックしたコントロール名を取得してForm2に渡したい」のです。 テキストボックスがたくさんあるので、textBox1とか決まった名前ではありません。 この部分がわからないのです。 ------------------------------------------------------- Form1: private void textBox1_Click(object sender, EventArgs e) {  Form2 fromItem = new Form2(sender);  DialogResult deRet = fromItem.ShowDialog(); } Form2: public Form2(object sender) {  InitializeComponent();  object pSender = sender; } private void button_input_Click(object sender, EventArgs e) {  ((System.Windows.Forms.TextBox)pSender).text = "hoge"; } ------------------------------------------------------- この程度しかわかりません。 正しい方法を教えてください。よろしくお願いいたします。

  • フォーム1はどこへいったのでしょう?

    初心者です。 Microsoft Visual Basic 2008 Express Editionを使用しています。 新しいプロジェクト→windowsフォームアプリケーション →Form1に何個かコントロールを置く→デバッグ開始 →プロジェクトの保存→名前、ソリューソン名、WindowsApplication1→上書き保存→VB2008の終了 をしました。 さて質問ですがForm1を起動されたいのですがどこにあるのでしょう? C:\Users\○○\Documents\Visual Studio 2008\Projectsの中に 「WindowsApplication1」というフォルダがあるのでクリックしてみましたがどれを探せばいいのかわかりません。 そもそも「exe」の拡張子を捜せばいいのですよね?どうも見当たりません。 ご教授よろしくお願いします。

  • keydownイベントを発生で他のフォームで受信

    VB初心者です。 よろしくお願いします。 バーコードリーダーで読み込んでtextboxに表示させる仕組みを作りましたが、バーコードリーダーが ないのでバーコードリーダーを読み込んだように疑似的にできるようなことを考えています。 考えとしては バーコードを読み込んで表示させる:フォームA  ・keydownイベントを受っとる  ・textboxに読み込んだ値を表示 バーコードを読み込んだように疑似的に動作する:フォームB  ・keydownイベントを発生させる  ・フォームBに入力した値をフォームAに渡す フォームAは作成できましたが、フォームBのようなことはできるのでしょうか。 どのようなイベントを使用したらいいかなど、アドバイスをいただけないでしょうか。 環境:VB2008 OS:Windows7

専門家に質問してみよう