我有一个带有按钮的主窗体,单击该按钮后,使用以下代码打开一个子窗体:
// Global variable
public bool unitConnected = false;
private void buttonOpenSubForm_Click(object sender, EventArgs e)
{
unitConnected = true;
SubForm subForm= new SubForm();
if (subForm.ShowDialog(this) == DialogResult.OK)
{
// Do something
}
}
在子表单中,我想读取全局变量
unitConnected
并将其用作条件,但是当我尝试读取它时,它只读取false
,即使我在打开子表单之前已将其设置为true。
下面是子表单代码:
private MainForm mainForm = new();
public SubForm()
{
InitializeComponent();
}
private void SubForm_load(object sender, EventArgs e)
{
if (mainForm.unitConnected) // Do something
}
我对为什么会发生这种情况的新手理解是;当我在
MainForm
中引用 SubForm
时,我初始化了一个 new MainForm
对象,因此当我尝试读取 unitConnected
变量时,我只读取它的初始状态。
那么,有没有办法引用现有的
MainForm
对象,其中 unitConnected
或任何其他公共变量已被更改?
或者如果我错了,你能建议一个解决方案吗?
您可以在构建子表单时传递对主表单的引用,然后使用
new SubForm(this)
进行调用。
子表格:
private MainForm mainForm = new();
public SubForm()
{
InitializeComponent();
}
主要形式:
public bool unitConnected = false;
private void buttonOpenSubForm_Click(object sender, EventArgs e)
{
unitConnected = true;
SubForm subForm= new SubForm(this);
if (subForm.ShowDialog(this) == DialogResult.OK)
{
// Do something
}
}
据我了解,您想要创建类似 MessageBox 的内容,您将在其中打开包含特定信息的表单,最后您将选择“确定”或“取消”。如果这是您的意图,您应该按照以下步骤操作。
第1步:
private void button1_Click(object sender, EventArgs e)
{
SubForm sub = new SubForm();
if (sub.ShowDialog(this) == DialogResult.OK)
{
//Your Code
}
}
第2步:
在“SubForm”模型中,添加一个按钮并将该按钮的 DialogResult 属性设置为我选择的任何值“Ok”。
请注意,如果您想从“SubForm”模型接收任何值,请设置“static”类型的中介器 class 并输入所需的属性和函数,以便以出色的方式从任何地方访问这些值。