0

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

myclass,我写过textBox1,但智能感知没有向我建议。将私有更改为公共并不能解决问题。

这是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;
    }
}
4

2 回答 2

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;
    }
}
于 2013-03-15T00:40:54.207 回答
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;
}
于 2013-03-15T00:46:47.177 回答