[英]Cannot access Class methods from previous windows form - C#
我仍然在编写应用程序,我需要在每分钟30分钟内测试一些设备。 使用计时器设置每60秒启动一次并执行事件处理程序中所需的操作是很有意义的。
但是,我需要应用程序等待30分钟,直到我完成计时器为止,因为以下代码会更改我要监视的设备的状态。
我显然不想使用任何形式的循环来执行此操作。 我想到了使用另一个Windows窗体,因为我还显示进度,它将简单地启动计时器并等待其完成。
我遇到的问题是我使用了设备类,并且似乎无法从第二个(实际上是第三个-参见下文)Windows窗体访问设备类中的方法。
我有一个初始的Windows窗体,可以从用户那里获取输入,然后调用第二个Windows窗体,在该窗体上可以确定需要完成哪些测试以及需要使用哪些设备类,然后我想将第三个Windows窗体调用为处理计时器。
我将有多达6-7个设备类,因此只想在实际需要它们时才从第二种形式实例化它们。
我应该将此逻辑放入第一个Windows窗体(程序类??)吗?
我是否还会有无法从那里访问设备类方法的问题?
无论如何,也许有人知道一种更好的方法,可以每分钟进行一次检查而无需执行其余代码(并更改设备的状态),或者我应该如何访问应用程序中的方法?
你好
以下是“致电”表格-
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace TestCall
{
public partial class Form1 : Form
{
NDTClass NDT = new NDTClass();
public Form1()
{
InitializeComponent();
NDT.NDTOpen();
NDT.NDT1_CMD1();
(new Form2()).ShowDialog();
NDT.NDTClose();
}
public class NDTClass
{
public static double SWVolt = 0.5;
public static string Rxstring = "";
public SerialPort port = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
public string NDTOpen()
{
port.Open();
port.Write("CURRENT ?\r\n");
return Rxstring;
}
public void NDTClose()
{
port.Close();
}
public void NDT1_CMD1()
{
port.Write("DUAL MODE\r\n");
}
}
}
}
以下是所谓的表格-
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TestCall
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
Form1.NDTClass.SWVolt = 99;
NDT.NDT1_CMD1();
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
}
调用形式的NDT.NDT1_CMD1()在构建中给我以下错误-
Error 1 The name 'NDT' does not exist in the current context
在NDTClass中使用变量SWVolt可以正常工作,但是无法在类中使用该方法。
我做错了什么??
谢谢,乔治。 (我希望格式也能正确显示)。
Form1.NDTClass.SWVolt = 99;
之所以起作用,是因为您引用了Form1.NDTClass类中的公共静态字段。 它不绑定任何实例。 但是对于` NDT.NDT1_CMD1(); ,这是行不通的,因为:
Form1.NDTClass NDT = new Form1.NDTClass()
。 我认为您需要确保您了解变量范围 。
让我尝试另一种解释: SWVolt
作为公共静态字段,具有全局作用域。 可从应用程序中的任何位置访问它。 NDT
作为私有实例字段具有Form1单个实例的范围。 也就是说,只能从Form1的实例内部访问它。 任何不属于Form1的代码都看不到它,当然其中包括Form2中的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.