Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从表1和表2访问变量_C#_Forms_Stack Overflow - Fatal编程技术网

C#从表1和表2访问变量

C#从表1和表2访问变量,c#,forms,stack-overflow,C#,Forms,Stack Overflow,我想访问变量,比如从表1到表2,我有一个主窗体,然后打开另一个带有一些指示器的窗体,一个计时器在表2中不断滚动,以检查表1中的变量和列表,并点亮或点亮指示器。 但我得到了“堆栈溢出验证”的图片 代码如下: public partial class Form1 : Form { Diagnostik formDiagnostics = new Diagnostik(); 打开表单2的按钮: private void buttonDiagnostics_Click(object sende

我想访问变量,比如从表1到表2,我有一个主窗体,然后打开另一个带有一些指示器的窗体,一个计时器在表2中不断滚动,以检查表1中的变量和列表,并点亮或点亮指示器。 但我得到了“堆栈溢出验证”的图片

代码如下:

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

在屏幕截图上,我看到您正在Diagnostik表单构造函数中创建表单1。同时,您正在Form1构造函数中创建诊断表单。因此,这里可能有一个无休止的循环。

您需要将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; }

是的,这似乎是问题所在。看看你的呼叫堆栈。您将看到一系列构造函数在Diagnostik和Form1之间切换。您的Form1被声明为“新建”(并且您从未显示)。您没有引用屏幕上的表单。传递推荐信。谢谢<代码>Diagnostik formDiagnostics=新的Diagnostik(此)“这”给出了一个错误“不可用…”我像你写的那样添加了这个:
private Form1 Form1;公共诊断(Form1 Form1){this.Form1=Form1;}
An当我编写form1.blabla时,会显示ListServo1输入,但当我运行表单时,我得到:Husmaskin GUI.exe中发生“System.NullReferenceException”类型的未经处理的异常。其他信息:尚未为对象的实例指定对象引用?我已编辑了我的答案,以更正我犯的错误。确定,谢谢。事实上,我改为使用选项卡而不是表单,因为它避免了问题,并提供了一个更干净的外观