Form1窗体上有两个Button控件(button1、button2),功能分别为动态添加TextBox控件、向TextBox控件添加文字。
代码如下:
[code=C#][/private void button1_Click(object sender, EventArgs e)
        {
            TextBox myTextBox = new TextBox();
            myTextBox.Location = new Point(50,50);
            myTextBox.Size = new Size(50, 20);
            myTextBox.Multiline = true;
            myTextBox.ScrollBars = ScrollBars.Vertical;
            this.Controls.Add(myTextBox);
        }]
疑问1:TextBox对象的作用域是在button1_Click方法里面,当方法调用完后,难道对象资源不释放,即Form1窗体的TextBox控件消失?
疑问2:TextBox控件的作用域只限于button1_Click方法里面,我如何在另一个方法里操作TextBox控件呢?

解决方案 »

  1.   


            private void button1_Click(object sender, EventArgs e)
            {
                TextBox myTextBox = new TextBox();
                myTextBox.Name = "wee";
                myTextBox.Location = new Point(50, 50);
                myTextBox.Size = new Size(50, 20);
                myTextBox.Multiline = true;
                myTextBox.ScrollBars = ScrollBars.Vertical;
                this.Controls.Add(myTextBox);
                i=myTextBox.TabIndex;
            }        private void button2_Click(object sender, EventArgs e)
            {
                this.Controls["wee"].Text = "1234";
            }
      

  2.   

    1. 已调用了this.Controls.Add(myTextBox);,就不是在button1_Click里面了
    2. myTextBox,如为全局变量,其它都可以访问
      

  3.   

       private void button1_Click(object sender, EventArgs e)
            {
              
                for (int i = 0; i < 5; i++)
                {
                    TextBox tb = new TextBox();
                    tb.Name = "tb_test";
                    tb.Text = "测试";
                    this.Controls.Add(tb);
                }        }        private void button2_Click(object sender, EventArgs e)
            {
                foreach (Control cl in this.Controls.Find("tb_test", false))//查找所有name为tb_test的TextBox
                {
                    if (cl is TextBox)
                    {
                        TextBox tb = cl as TextBox;
                        MessageBox.Show(tb.Text);
                    }
                }        }
      

  4.   

    同意2#,添加 myTextBox 到 Controls 里面后就不会被垃圾回收。另外,建议把 TextBox 的定义拉到外面来,做成全局变量,等使用的时候再去 new 他,访问的问题就OK啦。调试一下,你就会明白这个对象到底有没有回收,什么时候回收...但是我觉得LZ的主要问题是不是这样的:想每次点击下按钮,就会在界面出现一个新的按钮。如果这样的话,建议LZ重新思考下程序的设计,当前的做法估计会有点不太合理。