簡體   English   中英

Visual C# - 在另一個類中創建的對象的訪問實例

[英]Visual C# - Access instance of object created in one class in another

我提前道歉,根據范圍可能是一個相當簡單/快速的答案,但我已經到處看了,很驚訝沒有想出答案。

我創建了一個名為Soldier的類,其中包含大約 100 個類變量。 我需要一個用戶輸入信息並在幾個不同的類 Forms 的過程中逐漸構建一個Solider對象(因為有太多的數據需要收集一個)。

我在Form1.cs 中創建了一個士兵 (tempSoldier) 的(空)實例,並開始設置我從用戶那里收集的對象的類變量。

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 ...)共享相同的命名空間。

提前致謝

編輯:以下所有解決方案都有效,因此這取決於您最喜歡哪一個。 感謝您的反饋意見。 一個小注意事項,確保您將所有類修飾符設為 Public,包括您的自定義類(在我的情況下為 Soldier.cs)。

您需要在更高的范圍內聲明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;
}

如果表單有不同的順序,前一種方法是可以的; 如果不同的形式可以在不同的時間使用或重新審視,后者會更好。

您還可以使士兵成為靜態變量:

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

其他形式的代碼:

Form1.soldier.name ="";

您應該在您的表單上創建一個公共屬性來暴露士兵。 然后,您可以從其他表單訪問此屬性。

// ...

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;

    // ...
  }
}

在您的另一個類中,創建一個以對象為參數的方法。

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 = newTextbox.Text;
}

然后在您的主窗體中,使用您的對象作為參數調用該方法。 在這種情況下,將 textbox1 添加到方法的參數中。

您的代碼形式:

TryMe(textbox1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM