如何在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;
}
}
答案 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;
}