Как использовать переменную в одном методе, если она была объявлена ​​в другом методе? C # - PullRequest
0 голосов
/ 11 июля 2011

Итак, я пытаюсь найти самый простой способ «повторного использования» переменной из предыдущего метода, но не могу найти именно то, что мне нужно.

В основном у меня есть простая программа, которая использует 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 ]

1 голос
/ 11 июля 2011
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();
    }
}
1 голос
/ 11 июля 2011

в вашем методе просто удалите строку объявления filePath, чтобы она выглядела как

filePath = OFD.FileName;

, и это все

1 голос
/ 11 июля 2011

Сделать это переменной экземпляра.

string path = "";

public void FirstMethod()
{
  path = "something";
}

public void SecondMethod()
{
  doSomething(path);
}
0 голосов
/ 11 июля 2011

Строка filePath в button1_Click объявляет новый экземпляр string в области видимости, которая скрывает экземпляры члена. Удалите тип string, чтобы filePath в методе ссылался на экземпляр члена. Скорее всего, вам также не нужно, чтобы экземпляр emmeber был public, но он должен быть закрытым, поскольку он позволяет двум методам взаимодействовать.

 public void button1_Click(object sender, EventArgs e)
    {
        // etc.
        filePath = OFD.FileName;
    }

 private string filePath;
0 голосов
/ 11 июля 2011

Вы не можете в коде, который вы опубликовали, потому что он выходит за рамки и ушел.

Первый метод может вернуть выбор, а затем передать его второму методу. Это будет работать.

Мне не нравятся ваши имена методов. button2_Click? button1_Click? Никто не говорит клиентам, что делает метод.

Ваши методы, возможно, делают слишком много. У меня мог бы быть один метод, чтобы выбрать файл и отдельные для чтения и записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...