繁体   English   中英

非静态字段,方法或属性需要对象引用

[英]An object reference is required for the non-static field, method, or property

好。 我的以下代码有问题:

StreamReader arrComputer = new StreamReader(FileDialog.FileName);

我的第一个问题已经回答,现在我的第二个问题集中在此代码的末尾。

我正在读取用户使用OpenFileDialog通过按钮事件选择的文本文件StreamReader

private void button1_Click(object sender, EventArgs e)


        {
            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.InitialDirectory = @"C:\";
            fileDialog.Filter = "Text|*.txt|All|*.*";
            if (fileDialog.ShowDialog() == DialogResult.OK) ;
            textBox1.Text = fileDialog.FileName;
            buttonRun.Enabled = true;
        }

在代码的后面,用户将单击“运行”按钮以对列表中的每个项目执行一些代码。

我在使用StreamReader使用以下代码解析列表时遇到问题:

private void buttonRun_Click(object sender, EventArgs e)
        {
            StreamReader arrComputer = new StreamReader(FileDialog.FileName);

        }

这是我从编码中收到的错误:

"An object reference is required for the non-static field, method, or property 'System.Windows.Forms.FileDialog.FileName.get' "

我认为我了解问题所在,但很难解决。

在我看来,就像您在button1_Click方法中创建一个新的OpenFileDialog对象,并将对该对象的唯一引用存储在局部变量fi​​leDialog中。

然后,在您的buttonRun_Click方法中,您似乎想要从在先前方法中创建的对话框中获取文件名。 但是,那不是您在做什么。 编译器将您的代码解释为尝试读取FileDialog类的FileName属性,就好像它是静态成员一样。 您的代码中还有其他问题,但是导致您引用的编译器错误的问题很可能是FileDialog.FileName问题。

您的意思是从在第一种方法中创建的OpenFileDialog实例中读取FileName属性,但是该对象仅存储在局部变量中。 您无法通过第一种方法访问它。 但是,由于您还将文件名存储在文本框中,因此您可以从该文本框中读取文件名,因此您无需访问OpenFileDialog对象。

您是否不认为需要使用textBox1.Text?

 StreamReader arrComputer = new StreamReader(textBox1.Text);

FileDialog是一个类名,您需要使用一个对象来访问FileName属性,因此会出现错误。 我建议使用fileDialog.FileName ,但是当button1_Click方法退出时,您已经扔掉了fileDialog (注意小写的“ f”)。

但是,在该方法退出之前,已将文件名保存在textBox1.Text ,并且该文件名仍然可用。 尝试使用:

StreamReader arrComputer = new StreamReader(textBox1.Text); 

尝试这样做:

private void buttonRun_Click(object sender, EventArgs e) {
    StreamReader arrComputer = new StreamReader(textBox1.Text);
}

当您确定“ FileOpen”对话框时,您将在表单上存储所选文件名(通过设置textBox1.Text),因此最好使用此存储的值,而不要返回原始的FileOpen对话框。

FileDialog是控件的名称还是控件的类型? 我猜这是类型。 将文件对话框拖到窗口中时,将得到一个名为FileDialog1的FileDialog。 试试看,让我知道。

button1_Click您定义了一个本地fileDialog变量,该变量在事件处理程序的末尾消失。

buttonRun_Click您在类FileDialog上使用类方法。

似乎您需要在表单级别(在button1_Click外部)声明一个fileDialog变量,并在两个事件处理程序中使用相同的变量。

执行此操作时,请注意fileDialogFileDialog拼写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM