我提前道歉,基于范围可能是一个相当简单/快速的答案,但我到处都看,并且对于没有得到答案感到惊讶。
我创建了一个名为 Soldier 的类,其中包含大约100个类变量。我需要用户输入信息,然后在几个不同的类表单的过程中逐渐构建一个 Solider 对象(因为只有一个表单上有太多的数据要收集)。
我在 Form1.cs 中创建一个(空的)Soldier(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)。
答案 0 :(得分:9)
您需要在更高的范围内声明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;
}
如果表格有不同的序列,那么前一种方法是可以的;如果差异表格可以在不同时间使用或重新访问,后者会更好。
答案 1 :(得分: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;
// ...
}
}
答案 2 :(得分:3)
您还可以将士兵变为静态变量:
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 :(得分: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 = newTextbox.Text;
}
然后在您的主窗体中,以对象作为参数调用该方法。在这种情况下,请将textbox1添加到方法的参数中。
您的代码形式:
TryMe(textbox1);