現在、VisualStudioのFormアプリ.NET6.0を使用しながらリストの文法の学習を進めています。
【追加ボタン】を押せばテキストボックスの内容がリストに追加され、【出力ボタン】を押せばラベルにリストが出力されるというものです。作成中の文法は以下の通りです。
private void button1_Click(object sender, EventArgs e) { private void button1_Click(object sender, EventArgs e) { // string型の変数pを取得 string p = Convert.ToString(textBox1.Text); // string型のリストを宣言 List<string> list1 = new(); // 値がnullの場合 if (p == null) MessageBox.Show("文字を入力してください", "確認"); // list1に入力された値を追加 else list1.Add(p); } } private void button2_Click(object sender, EventArgs e) { // string型の変数pを取得 string p = Convert.ToString(textBox1.Text); // string型のリストを宣言 List<string> list1 = new(); // label1にリストを出力 foreach (string i in list1) { label1.Text = Convert.ToString(i); } }
上記の内容では、label1にlist1の内容が出力されません。
どの点に誤りがありますでしょうか。
ご教示いただけますと幸いです。
よろしくお願いいたします。
button1_Click の list1 と button2_Click の list1 は別物です。
変数のスコープについて学んでください。
https://programming.pc-note.net/csharp/scope.html
一般に文法というのは「文を作る際の決まり」のことです。文自身を指しません。
このコメントは日本語の文法に従って日本語で書かれています。
「この日本語を読んでください」とは言いますが、「この文法を読んでください」とは言いません。
プログラミングでは「文」という言葉にも特別な意味があるため、「作成中の文は以下の通りです」とも言いません。
「作成中のコードは以下の通りです」が良いでしょう。
ちゃんと理解しながら学習を進めてるんですかねぇ。
button1_Clickとbutton2_Clickが半分ほど同じコードになってるけど、それは合ってるのかなぁ。
(button1_Clickを作って、それをコピペしてbutton2_Clickを作ってるんだろうな)
各メソッドの処理を1ステップ毎に何をしているか追ってみましょう(button2_Clickだけでもいいけど)。
そうでなくても、KOZ6.0さんが指摘されているように、変数のスコープの違いのために、想定通りの動きにはなりません。
回答1件
あなたの回答
tips
プレビュー