-2

(我使用默认的 Visual Studio 名称)如何在 form1.cs 文件的另一个自定义类中引用 texbox 对象(texbox1)(“公共部分类 Form1:Form”中的类)

这是我的代码。在 myclass 我写了 textBox1,但 intelisense 并没有向我建议。我是说。在这种情况下,我该怎么做才能使 texbox1 出现在智能中?在 form1.Desginer.cs 中将 private 更改为 public 并不能解决它。请回答。

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


        class myclass 
        {

           textBox1

        }
}
4

3 回答 3

0

您不能只在嵌套类中引用它作为类的一部分Form1,您必须传入一个引用

例子:

class myclass 
{
    public TextBox MyTextBox { get; set; }

    public MyClass(TextBox textbox)
    {
        MyTextBox = textbox;
    }
}

然后在Form1你创建MyClass实例的类中,你可以传入你的TextBox

MyClass myClass = new MyClass(this.textBox1);
于 2013-03-15T00:39:15.400 回答
0

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我选择的更具描述性的名称。

于 2013-03-15T00:36:53.457 回答
0

在您的嵌套类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创建myclass链接到当前实例的实例。Form1new myclass(this)

于 2013-03-15T00:37:02.397 回答