如何引用由设计器创建的对象

本文关键字:创建 对象 何引用 引用 | 更新日期: 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);