如何在子窗体中引用主窗体对象?

问题描述 投票:0回答:2

我有一个带有按钮的主窗体,单击该按钮后,使用以下代码打开一个子窗体:

// 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
或任何其他公共变量已被更改?

或者如果我错了,你能建议一个解决方案吗?

c# winforms subform
2个回答
0
投票

您可以在构建子表单时传递对主表单的引用,然后使用

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
    }
}

-1
投票

据我了解,您想要创建类似 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 并输入所需的属性和函数,以便以出色的方式从任何地方访问这些值。

© www.soinside.com 2019 - 2024. All rights reserved.