一个对象引用是所必需的非静态字段,方法或属性(An object reference is requ

2019-10-29 02:47发布

好。 我在与下面的代码有点问题:

StreamReader arrComputer = new StreamReader(FileDialog.FileName);

我的第一个问题已经回答已经现在我的第二个问题,重点介绍这些代码的尾部。

我读的文本文件StreamReader用户使用按钮事件选择OpenFileDialog

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' "

我想我明白这个问题,但我有一个很难的工作吧。

Answer 1:

在我看来就像你创建你的button1_Click方法一个新的OpenFileDialog对象,并存储在一个局部变量,FileDialog的那个对象的唯一参考。

然后,在你buttonRun_Click方法,它看起来像你想从你在前面的方法创建的对话框中获取文件名。 这不是你在做什么,虽然。 编译器把你的代码尝试读取FileDialog类的FileName属性,就像它是一个静态成员。 有代码中的其他问题,但是这是造成你提到的编译器错误的问题很可能是FileDialog.FileName问题。

你的意思是读你的第一种方法创建的OpenFileDialog实例的FileName属性,但对象只存储在一个局部变量。 您有第一种方法之外没有访问它。 但既然你也已经在文本框中存储的文件名,你可以阅读的文件名指出,文本框的,所以你不需要访问的OpenFileDialog对象。



Answer 2:

FileDialog是一个类名,你需要使用一个对象来访问FileName属性,因此错误。 我推荐使用fileDialog.FileName ,但你已经扔掉你fileDialog (注意是小写的“F”)时button1_Click方法退出。

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

StreamReader arrComputer = new StreamReader(textBox1.Text); 


Answer 3:

难道你不认为你需要使用textBox1.Text?

 StreamReader arrComputer = new StreamReader(textBox1.Text);


Answer 4:

尽量不要做这样的:

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

当你确定你的FileOpen对话框,你存储你的表格上所选择的文件名(通过设置textBox1.Text),所以你最好不要使用该存储值,而不是指回到原来的FileOpen对话框。



Answer 5:

FileDialog控件的名称,或控件的类型? 我猜测它的类型。 当您将一个文件对话框到你的窗口,你会得到一个名为的FileDialog FileDialog1。 尝试,让我知道。



Answer 6:

button1_Click您定义的本地fileDialog变量,它消失在事件处理程序的结束。

buttonRun_Click您使用的类的类方法FileDialog

看来你需要声明在表单级别(的button1_Click外)一个FileDialog的变量,并在这两个事件处理程序使用同一个变量。

当这样的手表为fileDialogFileDialog拼写。



文章来源: An object reference is required for the non-static field, method, or property