所以我试图找出从以前的方法“重用”变量的最简单方法,但是无法找到我在任何地方寻找的确切内容。
基本上我有一个简单的程序,它使用openFileDialog打开一个文本文件(这只需点击一下按钮就会发生)。在另一个按钮单击它写我写的文件。
我遇到的问题是编写文件,因为我无法重用方法1中的路径变量:/
这是我的代码:
public void button1_Click(object sender, EventArgs e)
{
OpenFileDialog OFD = new OpenFileDialog();
OFD.Title = "Choose a Plain Text File";
OFD.Filter = "Text File | *.txt";
OFD.ShowDialog();
string filePath = OFD.FileName;
if (OFD.FileName != "") {
using (StreamReader reader = new StreamReader(@filePath))
{
while (!reader.EndOfStream)
{
richTextBox1.AppendText(reader.ReadLine());
}
reader.Close();
}
}
}
public string filePath;
public void button2_Click(object sender, EventArgs e)
{
using (StreamWriter writer = new StreamWriter(@filePath)){
writer.WriteLine(richTextBox1.Text);
writer.Close();
}
}
答案 0 :(得分:1)
将其设为实例变量。
string path = "";
public void FirstMethod()
{
path = "something";
}
public void SecondMethod()
{
doSomething(path);
}
答案 1 :(得分:1)
在你的方法中只删除声明字符串filePath使其看起来像
filePath = OFD.FileName;
这就是
答案 2 :(得分:1)
public string filePath;
public void button1_Click(object sender, EventArgs e)
{
OpenFileDialog OFD = new OpenFileDialog();
OFD.Title = "Choose a Plain Text File";
OFD.Filter = "Text File | *.txt";
OFD.ShowDialog();
filePath = OFD.FileName;
if (OFD.FileName != "") {
using (StreamReader reader = new StreamReader(@filePath))
{
while (!reader.EndOfStream)
{
richTextBox1.AppendText(reader.ReadLine());
}
reader.Close();
}
}
}
public void button2_Click(object sender, EventArgs e)
{
// you should test a value of filePath (null, string.Empty)
using (StreamWriter writer = new StreamWriter(@filePath)){
writer.WriteLine(richTextBox1.Text);
writer.Close();
}
}
答案 3 :(得分:0)
你不能在你发布的代码中,因为它超出了范围并且已经消失了。
您可以让第一个方法返回选择,然后将其传递给第二个方法。那会有用。
我不喜欢你的方法名称。 button2_Click
? button1_Click
?没有人告诉客户该方法的作用。
你的方法可能做得太多了。我可能有一种方法可以选择文件,另外一种方法可以读写。
答案 4 :(得分:0)
button1_Click中的filePath
字符串在一个范围内声明了string
的新实例。删除string
类型以使方法中的filePath
引用成员实例。很可能你也不需要emmeber实例public
,但应该是私有的,因为它允许两种方法进行通信。
public void button1_Click(object sender, EventArgs e)
{
// etc.
filePath = OFD.FileName;
}
private string filePath;