文本框对象参考

时间:2013-03-15 00:11:25

标签: c# winforms textbox

如何在form1.cs文件中的另一个自定义类中引用TextBox对象(比如textBox1)?

myclass中,我写过textBox1,但是smartSense没有向我提出建议。将私人变为公共并不能解决问题。

以下是form1.cs的示例代码

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

        class myclass {
            // What can I do to make texbox1 show up in intelliSense here? 
            // textBox1
        }

        public System.Windows.Forms.TextBox textBox1;
    }
}

2 个答案:

答案 0 :(得分:4)

如果要直接在myClass范围内引用它,请将其声明为静态。

或者您需要一个Form1的实例,但是这不允许您在类定义范围中声明对它的引用,您需要在构造函数中实例化Form1的实例(或者类型初始值设定项),您可以将其分配给myClass的成员。

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

        class myclass {
            TextBox textBox3=Form1.textBox1;
            TextBox textBox4;
            Form1 form1;

            public myclass() {
                form1=new Form1();
                textBox4=form1.textBox2;
            }
        }

        static public System.Windows.Forms.TextBox textBox1;
        public System.Windows.Forms.TextBox textBox2;
    }
}

更新:

对于Form1的当前实例的关注,以下是实例化myclass

时传递当前实例的各种方式之一
namespace Calculator {
    public partial class Form1: Form {
        public Form1() {
            InitializeComponent();

            textBox1=textBox2; // demonstration for "static make sense"

            var x=new Form1.myclass {
                form1=this
            };

            // now x.textBox3 is reference to textBox2
        }

        public class myclass {
            TextBox textBox3=Form1.textBox1;
            TextBox textBox4;
            internal Form1 form1;

            public myclass() {
                // form1=new Form1();
                textBox4=form1.textBox2;
            }
        }

        static public System.Windows.Forms.TextBox textBox1;
        public System.Windows.Forms.TextBox textBox2;
    }
}

答案 1 :(得分:3)

嵌套类型与其包含类型具有静态关系。这意味着默认情况下,他们无权访问包含类型的任何特定实例。如果希望内部类型从包含类型访问某个字段,则必须将实例传递给内部类型。最常见的方法是将实例传递给嵌套类型的构造函数。

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

    class myclass {
        private Form1 parent;

        public myclass(Form1 parent) {
            this.parent = parent;
        }

        public void DoSomething() {
            parent.textBox1.Text = "Hello, World!";
        }
    }

    public System.Windows.Forms.TextBox textBox1;
}