1

Button3 がクリックされると、新しい TextBox を作成するプログラムを書きたいと思います。何らかの理由で、C# は txtRun を認識しません。現在のコンテキストには txtRun という名前が存在しないと表示されます。これが私のコードです:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text += "a";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text += "b";
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

          txtRun = new TextBox();
          txtRun.Name = "txtDynamic";
          txtRun.Location = new System.Drawing.Point(20, 18);
          txtRun.Size = new System.Drawing.Size(200, 25);
          // Add the textbox control to the form's control collection         
              this.Controls.Add(txtRun);
      }

        }



        }
    }
}
4

5 に答える 5

3

使用する前に、C# で変数を宣言する必要があります。

どちらかを使用

TextBox txtRun = new TextBox();

または暗黙的に型指定された変数を使用します。

var txtRun = new TextBox();
于 2013-06-05T02:19:19.703 に答える
1

で試してください

  var txtRun = new TextBox();
  txtRun.Name = "txtDynamicTemp";
  txtRun.Location = new System.Drawing.Point(20, 18);
  txtRun.Size = new System.Drawing.Size(200, 25);
  // Add the textbox control to the form's control collection         
      this.Controls.Add(txtRun);
于 2015-10-07T18:38:50.703 に答える
0

質問:

何らかの理由で、C# は txtRun を認識しません。現在のコンテキストには txtRun という名前が存在しないと表示されます。

答え:

あなたの声明では

txtRun = new TextBox();

変数 txtRun を作成しましたが、型を指定していません。文字列または int TextBox を作成する場合と同様に、txtRun の前にクラス TextBox の名前を使用する必要があります。

TextBox txtRun = new TextBox();

TextBox という単語を var に置き換えて、コンパイラに推測させることもできます。

これで当面の疑問が解決します。

ただし、ここでの実際の問題は、ユーザーがボタンを無限にクリックすると、無限の数の TextBox が作成されることです。また、気付かないかもしれませんが、ボタンを2回押すと、元のテキストボックスの下にテキストボックスが配置されるため、入力したテキストが残るため気付かないかもしれませんが、大量のテキストボックスを作成していることを保証します.ダメ。いくつかの異なる方法でこれにアプローチできるシナリオに応じて、何を達成しているのか正確にはわかりません。

シナリオ 1 (動的に作成された TextBox が 1 つだけ必要)

TextBox が既に作成されているかどうかを確認する変数を作成して、1 つだけ作成します。*実際には、クリック メソッドの外側で TextBox を作成または呼び出す必要があることに注意してください。これは、そのスコープが失われるためです。

シナリオ 2 (複数の TextBox を動的に作成する場合)

TextBox リストまたは配列を作成して、動的に作成された TextBox を簡単に追跡できるようにします FlowLayoutPanel や TableLayoutPanel などを使用して TextBox の配置を処理します新しいテキストボックス。*実際には、何らかの方法でクリック メソッドの外側で TextBox を作成または呼び出す必要があることに注意してください。これは、そのスコープが失われるためです。

必要な場合は教えてください。どのような場合であれ、より詳細に説明します。

于 2013-06-05T03:31:36.570 に答える
0

与えられた回答に加えて、あなたが提供した抜粋されたコードを見ると、閉じ中括弧が多すぎるようです。より具体的には、最後の 2 つ - これらは必要ありません。

于 2013-06-05T02:49:52.967 に答える