非静态字段,方法或属性需要对象引用
好的。我有一个问题与下面的代码位:非静态字段,方法或属性需要对象引用
StreamReader arrComputer = new StreamReader(FileDialog.FileName);
我的第一个问题已经回答已经现在我的第二个问题,重点介绍这些代码的尾部。
我读了用户使用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
在列表中。
我使用的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对象。
是FileDialog
您的控件的名称或控件的类型?我猜这是这种类型。将文件对话框拖到窗口中时,会得到一个名为FileDialog1的FileDialog。试试这个,让我知道。
你不觉得你需要使用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
是一个类的名称,您需要使用一个对象来访问FileName
属性,因此出现错误。我建议使用fileDialog.FileName
,但当button1_Click
方法退出时,您已经扔掉了fileDialog
(注意小写字母“f”)。
但是,在退出该方法之前,您已将文件名保存在textBox1.Text
中,并且该文件名仍应可用。尝试使用:
StreamReader arrComputer = new StreamReader(textBox1.Text);
在button1_Click
您定义的本地fileDialog
变量,它消失在事件处理程序的结束。
在buttonRun_Click
中,您正在对类FileDialog
使用类方法。
看来您需要在窗体级别(button1_Click外部)声明一个fileDialog变量并在两个事件处理程序中使用相同的变量。
做这个手表时为fileDialog
和FileDialog
拼写。
优秀的解释。谢谢。我将其更改为StreamReader arrComputer = new StreamReader(textBox1.Text)并且工作正常。新手错误。 – Jim 2008-11-10 22:08:41