質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

327閲覧

Form1の処理とForm2の処理を連動させたい

morikunn

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/04/14 14:15

前提・実現したいこと

C#で記憶力判定プログラムみたいなのを作っています

発生している問題・エラーメッセージ

private void timer1_Tick(object sender, EventArgs e)
{
c++;
fm3.label1.Text = r.Next(1, 100).ToString();
number[s] = Convert.ToInt32(fm3.label1.Text);
s++;
if (Convert.ToInt32(comboBox1.Text) + 1 == c)
{
timer1.Enabled = false;
fm3.Hide();
s= r.Next(1, c - 1);
fm2.label1.Text = s + "枚目のカードの数字は?";
fm2.ShowDialog();
}
}

この変数s→s= r.Next(1, c - 1);をForm2のボタンクリックイベント下のif (number[s] == Convert.ToInt32(fm2.textBox1.Text))と連動させたい

エラー文  名前 's' は現在のコンテキスト内に存在しません。

該当のソースコード

private void button1_Click(object sender, EventArgs e)
{
if (number[s] == Convert.ToInt32(fm2.textBox1.Text))
{
}

試したこと

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

あんまり良い設計とは思えないですが、Form2(fm2)にパブリックプロパティをもって、ShowDialog前に渡してもらえばいいんじゃないですかね?

csharp

1fm2.label1.Text = s + "枚目のカードの数字は?"; 2fm2.CurrentS = s; 3fm2.ShowDialog(); 4 5class Form2 : ... 6{ 7 public int CurrentS { get;set; } = 0; 8 private void button1_Click(object sender, EventArgs e) 9 { 10 if (CurrentS < 1) throw new Exception(); // 0初期化で、1以上の乱数を貰うなら、1未満の値は不正と判断できる 11 if (number[CurrentS] == Convert.ToInt32(fm2.textBox1.Text)) 12 { 13 } 14 } 15}

投稿2019/04/15 13:08

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラー文  名前 's' は現在のコンテキスト内に存在しません。

変数「s」が宣言されていないか、宣言している場所が正しくないときに出るエラーですので、ご確認ください。

追記

Form2 に Form1 の参照を持たせておけば、Form1 の状態を見て Form2 の処理を変えることはできると思います。

そもそも、ユーザーに 2 つのフォームを同時に操作させるのはアプリケーションの使い勝手としてどうなのか?という疑問はありますが。

C#

1using System; 2 3namespace Sample 4{ 5 public int S { get; set; } 6 7 public class Form1 8 { 9 private void timer1_Tick(object sender, EventArgs e) 10 { 11 c++; 12 fm3.label1.Text = r.Next(1, 100).ToString(); 13 number[s] = Convert.ToInt32(fm3.label1.Text); 14 this.S++; 15 if (Convert.ToInt32(comboBox1.Text) + 1 == c) 16 { 17 timer1.Enabled = false; 18 fm3.Hide(); 19 this.S = r.Next(1, c - 1); 20 fm2.label1.Text = this.S + "枚目のカードの数字は?"; 21 fm2.ShowDialog(); 22 } 23 } 24 } 25 26 public class Form2 27 { 28 private form1; 29 30 public Form2(Form1 form1) 31 { 32 this.form1 = form1; 33 } 34 35 private void button1_Click(object sender, EventArgs e) 36 { 37 if (number[this.form1.S] == Convert.ToInt32(fm2.textBox1.Text)) 38 { 39 } 40 } 41 } 42}

投稿2019/04/14 14:27

編集2019/04/15 20:59
nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morikunn

2019/04/15 00:14

ご回答ありがとうございます。 form1の処理をform2に反映させるみたいなことって出来ないのでしょうか?
nskydiving

2019/04/15 20:59

質問欄にサンプルコードを追記しましたので、ご確認ください。
nskydiving

2019/04/15 21:00

すみません、回答欄の間違いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問