如何引用由设计器创建的对象
本文关键字:创建 对象 何引用 引用 | 更新日期: 2023-09-27 18:04:03
(我使用默认的Visual Studio名称)如何在Form1 .cs文件中的另一个自定义类中引用texbox对象(texbox1)("公共部分类Form1: Form"中的类)
是我的代码。在我的课上,我写过textBox1,但智能并没有建议我这么做。我的意思。在这种情况下,我怎么做才能让texbox1出现在情报部门?在form . designer .cs中将private改为public并不能解决这个问题。plaease答案。
namespace Calculator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
class myclass
{
textBox1
}
}
WinForms设计器默认将组件设为私有,理想情况下你不应该直接公开组件(比如控件),因为这会破坏封装。您应该代理您想要共享的字段,如下所示:
public partial class MyForm : Form {
private TextBox _textbox1; // this field exists in the MyForm.designer.cs file
// this property should be in your MyForm.cs file
public String TextBox1Value {
get { return _textbox1.Text; }
set { _textbox1.Text = value; }
}
}
这样,您可以在表单之间共享数据,但也可以保持封装(尽管您应该选择一个比我选择的TextBox1Value
更具描述性的名称)。
在您的嵌套类myclass
中,您不指定您引用的Form1
类的哪个实例。添加对Form1
的特定实例的引用,然后您将能够访问它的textBox1
成员。
通常,可以这样做:
class myclass
{
public myclass(Form1 owner)
{
if (owner == null) {
throw new ArgumentNullException("owner");
}
this.owner = owner;
}
private readonly Form1 owner;
public void DoSomething()
{
owner.textBox1.Text = "Hello, world!";
}
}
这段代码使用了以下情况下使用的各种模式:
-
owner
在构造函数中设置,从而确保它是永远不会null
- 添加到此,
null
被构造器拒绝 -
owner
成员是readonly
,因此可以肯定地说,在给定的myclass
实例 的生命周期内,它不会改变。
在Form1
的方法中,您可以通过调用new myclass(this)
来创建链接到当前Form1
实例的myclass
实例。
你不能在你的嵌套类中引用它作为Form1
类的一部分,你必须传递一个引用
的例子:
class myclass
{
public TextBox MyTextBox { get; set; }
public MyClass(TextBox textbox)
{
MyTextBox = textbox;
}
}
然后在创建MyClass
实例的Form1
类中,您可以传入TextBox
MyClass myClass = new MyClass(this.textBox1);