[英]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对象,并将对该对象的唯一引用存储在局部变量fileDialog中。
然后,在您的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变量,并在两个事件处理程序中使用相同的变量。
执行此操作时,请注意fileDialog
和FileDialog
拼写。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.