Visual C#-访问在另一个类的一个类中创建的对象的实例

问题描述 投票:12回答:4

我根据范围很可能是一个非常容易/迅速的答案,我事先表示歉意,但是我到处都是,很惊讶地没有提出答案。

我创建了一个名为Soldier的类,其中包含大约100个类变量。我需要用户输入信息,并在几种不同的类Forms的过程中逐步构建Solider对象(因为仅一个就可以收集太多数据)。

我在Form1.cs中创建一个士兵(tempSoldier)的(空)实例,然后开始set我从用户那里收集的对象的类变量。

private void button1_Click(object sender, EventArgs e)
{
    Soldier tempSoldier = new Soldier();
    tempSoldier.surname = textbox1.text;
}

我的问题:如何从其他类(Form2.cs,Form3.cs ...)中的Form1.cs中访问对象实例(tempSoldier)?

我应该提到所有表单(Form1.cs,Form2.cs ...)共享相同的名称空间。

提前感谢

编辑:以下所有解决方案都可以使用,因此仅取决于您最喜欢哪种解决方案。感谢您的反馈意见。需要注意的一点是,请确保将所有类修饰符都公开,包括您的自定义类(在我的情况下为Soldier.cs)。

c# instance-variables
4个回答
11
投票

您需要在更大的范围内声明Soldier实例。

执行此操作的一种方法是在Form1中声明它,然后将其传递给Form2,依此类推。

public class Form1
{
    private Soldier tempSoldier = new Soldier();

    private void button1_Click(object sender, EventArgs e)
    {
        tempSoldier = new Soldier();
        tempSoldier.surname = textbox1.text;
    }

    private void GotoNextStep()
    {
        // pass the existing instance to the next form
        Form2 form2 = new Form2(tempSoldier);

        // display form 2 ...
    }
}

另一种可能性是在所有表单都可以访问的类中使用单例变量。

public class MyAppManager
{
    private static readonly Soldier _soldier = new Solider();

    public static Soldier SoldierInstance
    {
        get { return _soldier; }
    }
}

private void button1_Click(object sender, EventArgs e)
{
    MyAppManager.SoldierInstnace.surname = textbox1.text;
}

如果表格有不同的顺序,则前一种方法是可以的;如果可以在不同时间使用或重新使用差异表格,则后者更好。


4
投票

您还可以使Soldier成为静态变量:

public static Soldier soldier {get;set;}
private void button1_Click(object sender, EventArgs e)
{
    soldier = new Soldier();
    soldier.surname = textbox1.text;
}

其他形式的代码:

Form1.soldier.name ="";

3
投票

您应该在表单上创建一个公开属性,以暴露士兵。然后,您可以从其他表单访问此属性。

// ...

public Soldier Soldier { get; private set; }

private void button1_Click(object sender, EventArgs e)
{
  Soldier tempSoldier = new Soldier();
  tempSoldier.surname = textbox1.Text;

  this.Soldier = tempSoldier;
}

// ...

您的Form2类可能看起来像这样:

public partial class Form2
{
  private Form1 form1;

  public Form2(Form1 form1)
  {
    this.form1 = form1;

    this.InitializeComponent();
  }

  public void DoStuffWithForm1()
  {
    // ...

    string surname = this.form1.Soldier.surname;

    // ...
  }
}

0
投票

在另一个类中,创建一个以对象为参数的方法。

public class TryMe (TextBox newTextbox) {
newTextbox.Text = "Hello this is a text."
//You can also get the value of textbox of another form
var textString = nexTextbox.Text;
}

然后在您的主要形式中,以您的对象作为参数来调用该方法。在这种情况下,请将textbox1添加到方法的参数中。

您的代码格式:

TryMe(textbox1);
© www.soinside.com 2019 - 2024. All rights reserved.