我正在开发一个程序,它有一个主屏幕,其中有一个用于创建新模拟的按钮,该按钮会打开一个名为“模拟”的新表单。 该模拟有两个用户控件,为了使用用户控件中表单的信息,我在表单中创建了一个实例
public static Simulation simulation = new();
public Simulation()
{
InitializeComponent();
simulation = this;
}
但是,如果我想返回主屏幕并创建一个新的模拟并保持第一个模拟的工作,我将无法使用第一个模拟,因为我的实例总是收到新的表单。我该如何解决这个问题?
我尝试创建一个包含所有模拟表单的列表。
您可以使用表单构造函数的参数将变量和对象作为参数传递给表单的新实例。
Form1 newForm = new Form1("some string", 12345);
newForm.Show();
public partial class Form1 : Form
{
public Form1(String passedString, int passedInt)
{
InitializeComponent();
String myString = passedString;
int myInt = passedInt;
}
}
这不是一个好的设计,但是您可以使用 FindForm() 来获取对包含 UserControl 的表单的引用:
public partial class SomeUserControl : UserControl
{
Simulation simulation = null;
public SomeUserControl()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (simulation == null)
{
simulation = this.FindForm() as Simulation;
}
if (simulation != null)
{
label1.Text = simulation.GetTextBoxValue();
}
}
}
这是主模拟表单中的公共 GetTextBoxValue() 方法:
public partial class Simulation : Form
{
public Simulation()
{
InitializeComponent();
}
public String GetTextBoxValue()
{
return textBox1.Text;
}
}
即使同时显示多个Simulation实例,这也将正确找到包含UserControl的Simulation实例。