如果以不同方法声明变量,如何在一种方法中使用变量? C#

时间:2011-07-10 23:41:53

标签: c# variables methods

所以我试图找出从以前的方法“重用”变量的最简单方法,但是无法找到我在任何地方寻找的确切内容。

基本上我有一个简单的程序,它使用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();
        }
    }

5 个答案:

答案 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_Clickbutton1_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;