C# 非静态字段、方法或属性需要对象引用';SSGvSPREAD.StartForm.dt.get';

C# 非静态字段、方法或属性需要对象引用';SSGvSPREAD.StartForm.dt.get';,c#,winforms,C#,Winforms,我的目标是测试2个第三方控件的加载时间。我有一个启动窗体和另外两个窗体,每个窗体上都有一个单独的控件。我的启动窗体(StartForm)创建一个公共DateTime变量 public partial class StartForm : Form { public DateTime dt { get; set; } public StartForm() { InitializeComponent(); } private void but

我的目标是测试2个第三方控件的加载时间。我有一个启动窗体和另外两个窗体,每个窗体上都有一个单独的控件。我的启动窗体(StartForm)创建一个公共DateTime变量

public partial class StartForm : Form
{
    public DateTime dt { get; set; }

    public StartForm()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.dt = DateTime.Now;
        using (Spread frm = new Spread())
        {
            frm.ShowDialog();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.dt = DateTime.Now;
        using (SSG frm = new SSG())
        {
            frm.ShowDialog();
        }
    }
}
现在我想在加载的表单中使用变量dt。这是我使用的代码

    private void Spread_Load(object sender, EventArgs e)
    {
        fpSpread1.OpenExcel(Application.StartupPath + @"\ST_XPCALC_NEW.xlsm");
        MessageBox.Show("Loading time: " + DateTime.Now.Subtract(StartForm.dt).TotalMilliseconds + " milliseconds");
    }
我在StartForm.dt得到这个错误

非静态字段、方法或属性“SSGvSPREAD.StartForm.dt.get”需要对象引用


我可能在做傻事…有什么想法吗?提前感谢。

如果变量声明为
静态
,即
的所有
实例
,则只能使用格式为
StartForm.dt
的变量,即
className.variableName

您在此处声明的变量
dt
,是一个
实例
变量,可供每个
实例
使用,但不可供
使用


注意:在您的情况下,您可能可以将
当前时间
作为参数传递给两个
表单构造函数
,将其保存在该特定表单的
实例变量
,并使用它来计算加载时间。

您对静态字段和非静态字段之间的差异了解多少?
Spread
类知道您从中调用的
StartForm
实例的任何信息吗?Jon已经说过了,但只是为了帮助您,
dt
应该是静态的,如果您想以您正在访问的方式访问它。我知道它很愚蠢。。我习惯于VB.NET..尝试将此公共属性dt转换为DateTime。使用vb到c#转换器,它排除了“静态”。。谢谢你的帮助!