C#访问来自表单1的变量,表单为2

时间:2018-03-08 16:33:17

标签: c# forms stack-overflow

我想访问变量等从表单1到表单2,我有一个主表单,然后用一些指示符打开另一个表单,一个计时器继续滚动表单2以检查表单1中的变量和列表并亮或暗指标。 但我得到了#34; Stack overflow exeption" se picture

这是代码:

public partial class Form1 : Form
{
    Diagnostik formDiagnostics = new Diagnostik();

打开表单2的按钮:

private void buttonDiagnostics_Click(object sender, EventArgs e)
    {

        formDiagnostics.Show();
    }

表格2:

public partial class Diagnostik : Form
{
    Form1 form1 = new Form1();

计时器:

private void updateGUI_Tick(object sender, EventArgs e)
    {
        if (Convert.ToBoolean(form1.ListServo1Inputs[0]) == true) { indicatorS1Di1.BackColor = Color.Green; }
        else { indicatorS1Di1.BackColor = Color.Gray; }

Error screen dump picture

2 个答案:

答案 0 :(得分:1)

在屏幕截图中,我看到您在Diagnostik表单构造函数中创建了Form1。与此同时,您将在Form1构造函数中创建Diagnostic表单。所以你可能在这里得到了无限循环。

答案 1 :(得分:0)

您需要将form1传递给formDiagnostics的构造函数:

public partial class Form1 : Form
{
    private Diagnostik formDiagnostics;

    public Form1()
    {
        formDiagnostics = new Diagnostik(this);
    }

在Diagnostik构造函数中,将Form1参数存储到字段/属性中:

public partial class Diagnostik : Form
{
    private Form1 form1;

    public Diagnostik(Form1 form1)
    {
        this.form1 = form1;
    }

然后,您可以访问您的私人Diagnostik.form1字段:

private void updateGUI_Tick(object sender, EventArgs e)
{
    if (Convert.ToBoolean(form1.ListServo1Inputs[0]) == true) { indicatorS1Di1.BackColor = Color.Green; }
    else { indicatorS1Di1.BackColor = Color.Gray; }