• ベストアンサー

C#で初歩で引っかかってしまいました

C#で今まで一つのFormの中でしかプログラムを組んでいませんでしたので 初歩の所で引っかかってしまい すいませんが教えていただけませんか? Form1のLoadで string A = "a" を 代入し Form2でAの内容を表示するにはどうしたらいいでしょうか? フォームの表示 や MessageBox.Showの仕方はわかるのですが 元のフォームから値を引っ張ることができません public string A で指定をしても値が引っ張ってこれません よろしくお願いいたします。

  • gotyan
  • お礼率91% (172/188)

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

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

Form2 のコンストラクタに Form1 のインスタンスを渡すようにしてはどうですか? ---- Form1.cs ---- public string A; private Form2 form2; form2 = new Form2(this); ---- Form2.cs ----- private Form1 form1; public Form2(Form1 f) { form1 = f; } private void Etc() { MessageBox.Show(this, form1.A); }

gotyan
質問者

お礼

ありがとうございます。 明日にでもやってみます

関連するQ&A

  • C# 親フォームで指定した値を子フォームで表示する

    表題の件がうまくできず、困っています。 やりたいことは 親フォームのリストボックスで選択した インデックス番号をshouDialog()で立ち上げた子フォーム側の textBoxに表示したいんですが、 何も表示されず困っています。 namespace test { public partial class Form1 : Form { //リスト変数 public string listChoise; [STAThreadAttribute] static void Main() { Application.Run(new Form1()); } public Form1() { InitializeComponent(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { listChoise = listBox1.SelectedIndex.ToString(); MessageBox.Show(listChoise);//←ここでは値がでます }     private void button1_Click(object sender, EventArgs e) { //子フォームを立ち上げる Form2 form = new Form2(); form.ShowDialog(); } } } ↓Form2クラス namespace test { public partial class Form2 : Form { public Form2() { InitializeComponent(); //リスト選択変数 Form1 list = new Form1(); textBox2.Text = list.listChoise; } } } この二つのクラスです。 とくにエラーはありません。 ちなみに >>>//リスト変数 >>>public string listChoise; の部分を public string listChose = "aaaaa"; としておくと、 子フォームのテキストボックスに"aaaaa"と表示されているようなんですが、 >>>listChoise = listBox1.SelectedIndex.ToString(); の値がちゃんと子フォームの方で受け取れていないようです。 結果はなにもひょうじされません。 子フォームの方で、 MessageBox.Show("listChoise");をしても 何も表示されません。 どんな原因が考えられますでしょうか。 よろしくお願いします。 環境:visualC# 2008 Express Edition

  • c#でのプログラムについて

    c#でのプログラムについて お世話になります。 c#初心者です。今までエクセルVBAでの簡単なプログラム経験があります。 コードファイル(CodeFile1.cs)からフォーム(Form1)を表示させるプログラム(初歩) ですでにいきづまっています。 ネットで見つけた、 「Form1 Form = new Form1();  Form.Show();」 と記述しましたら、下にあるエラー一覧で 「型または名前空間名'Form1が見つかりませんでした。usingディレクティブまたはアセンブリ  参照が不足しています。」と出ています。 なので、コードファイル(CodeFile1.cs)の上の方に 「using System.Windows.Form;」 と追加したのですが、まだエラー内容に変わりはありませんでした。 どうすればフォーム(Form1)を表示させるプログラムが出来るか どなたか、お教え頂きたく宜しくお願い致します。

  • C# フォームのShow()をオーバーライド

    ご質問があります。 フォームが二つ(フォームA、フォームB)あり、フォームAからフォームBを開く時に、フォームBにコードを渡す必要があり、フォームBのShow()をオーバーライドさせて(Show()に引数を設定し、引数でコードを渡し、フォームBの変数にコードをセットして使用する)、コードを使用します。 このShow()のオーバーライドのさせ方なのですが、以下ではエラーが出てしまいました。 public partial class FormB : Form { private string hacyucode; public FormB() { InitializeComponent(); } override void Show(string code) { hacyucode = code; } } ※「オーバーライドする適切なメソッドが見つかりませんでした。」というエラーが出てしまいます。 Show()の適切なオーバーライドの方法をご教授していただけませんでしょうか。 よろしくお願い致します。

  • C# フォームのShow()のオーバーライド

    ご質問があります。 フォームが二つ(フォームA、フォームB)あり、フォームAからフォームBを開く時に、フォームBにコードを渡す必要があり、フォームBのShow()をオーバーライドさせて(Show()に引数を設定し、引数でコードを渡し、フォームBの変数にコードをセットして使用する)、コードを使用します。 このShow()のオーバーライドのさせ方なのですが、以下ではエラーが出てしまいました。 public partial class FormB : Form { private string hacyucode; public FormB() { InitializeComponent(); } override void Show(string code) { hacyucode = code; } } ※「オーバーライドする適切なメソッドが見つかりませんでした。」というエラーが出てしまいます。 Show()の適切なオーバーライドの方法をご教授していただけませんでしょうか。 よろしくお願い致します。

  • 【C#】ループ文について

    いつもお世話になります。 C#に関して質問です。 VisualC#2008 を使用しています。 以下のようなプログラムを書いているのですが、for文内で配列に文字列を代入しているはずなのに、for文を出ると配列に文字列が代入されていないようなのです。 これはどうしてなのでしょうか? 誰か説明のほどよろしくお願いします。 string[] kari3 = new string[300]; int kari3_co = 0; if (i == 0) { for (int x = 0; x > 50; x++) { string dat2 = this.dataGridView1[x, 0].Value.ToString(); kari3[kari3_co++] = dat2; int y = 0; } string dat3 = string.Join(",", kari3); MessageBox.Show(dat3); }

  • C# 関数はどこに書くの?

    c#を始めました。 関数はどこに書けばよいのだろうと思い以下の2つのパターンを書きました。どちらも実行するとちゃんと動いています。 どちらの書き方が正しいのでしょうか?よろしくお願いいたします。 パターン1 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a=3; int n= tasu(a); MessageBox.Show(n.ToString());   //ここに関数を書く int tasu(int a10) { return a10 - 2; } } } パターン2 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a=3; int n= tasu(a); MessageBox.Show(n.ToString()); }   //ここに関数を書く int tasu(int a20) { return a20 -1; } }

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • EAccessViolationエラーの生成

    C++Builder 5.0でプログラムを作成しています。 Form1~Form3を作成し、Form1を自動生成の対象及びメインフォームとしました。Form1にはボタン1、Form2にはボタン2を用意し、ボタン1からはForm2を、ボタン2からはForm3を開くことが出来るようにしました。 Form1のボタン1には TForm2 *Form2 = new TForm2(Application); Form2->Show(); Form1->Hide();と記述し、 Form2のボタン2には TForm3 *Form3 = new TForm3(Application); Form3->ShowModal(); ← Form3はモーダルフォーム と記述しました。Form1とForm2のPublic部にint型の変数iとjを用意し、 Form3から Form1->i = 5; Form2->j = 5; という様に値を代入すると Form1の時はうまく代入できるのですが、Form2の変数に代入すると「Project1.exeがEAccessViolationクラスの例外を生成しました …」というエラーメッセージが表示されてしまいます。この原因は何でしょうか。なお、各フォームのヘッダファイルのインクルード はきちんと行っています。OSはWindows98です。御回答をどうかよろしくお願いします。

  • VB A,Bフォームから同一Cフォームを呼び出し呼出元によってCの処理を変えたい

    環境 WindowsXP SP3.0 VB6.0 宜しくお願いします。 表題通り、A.frm,B.frmという異なったフォームがあり、A.Bの処理で同一C.frmを C.Show 1 とモーダルで表示しています。 ここで、呼び出し元A,Bによって、C内部の処理を変えたいのですが Cの呼び出し元がAなのかBなのか、判定させるよいルーチンが思いつきません。 CのForm.Loadの引数に与えようと考えたのですが当然構文エラーになります。 Public変数を宣言して適当なパラメータを格納しC内で判定すればよい とは思うのですが、それはなるべく避けたいのです。 プロジェクト的には、A.vbpとB.vbpにフォームとしてC.frmを取り込んでいます。 よいアイデアや検索のヒントがあればご教授ください。

  • mapの引数としてstring型を用いたい

    言語はVisual C++ 2005、OSはXPを用いています。 <map>、<string>、<iostream>をincludeした上で、 Formを用意しボタンをクリックすると 以下のプログラムが動くようにすると、 これはうまくいきます。 (メッセージボックスに187と表示される。) map <int,int> mapTest; mapTest[10]=187; MessageBox::Show((mapTest[10]).ToString()); ところが、引数をString型に変えて、 以下のようにすると、 map <String^,int> mapTest; mapTest["qwe"]=187; MessageBox::Show((mapTest["qwe"]).ToString()); コンパイルエラー「マネージ'first'をアンマネージ'std::pair<_Ty1,_Ty2>'で宣言できません。」 となってしまいます。 どのように修正したらよいでしょうか?

専門家に質問してみよう