[英]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.