Member 14786879 Ответов: 3

Как сделать кнопку обновления


Привет,
У меня есть код, который читает в richtextbox последнюю строку из txt-файла.
То, что я хочу представить сейчас, - это кнопка обновления.
Я хочу поставить его так, чтобы мне не приходилось каждый раз использовать диалог открытия файла для чтения последней строки одного и того же файла, но если у меня есть эта кнопка обновления, программа просто вызывает последний файл, открытый с помощью диалога открытия файла, обновляет его на richtextbox, так что если есть какие-то новые строки, Она всегда будет позволять мне последнее, но этого момента.

Что я уже пробовал:

Это то, что я сделал, но понятия не имею, как должен быть код для создания этой кнопки обновления:
public async void OpenFileBtn_ClickAsync(object sender, EventArgs e)
        {
             using(OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text File|*.txt", Multiselect = false })
             {

                 if (ofd.ShowDialog() == DialogResult.OK)
                 {
                    using (StreamReader rd = new StreamReader(ofd.FileName))
                    {
                        //ReaderRichTxtBox.Text = await rd.ReadToEndAsync();
                        string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                        ReaderRichTxtBox.Text = lines[lines.Length - 1];
                    }
                 }
             }

        }


        private void RefreshBtn_Click(object sender, EventArgs e)
        {
            ..........................................

        }
    }
}

3 Ответов

Рейтинг:
22

phil.o

Вы можете создать строковую переменную уровня класса, содержащую текущий путь. Затем установите эту переменную на любой путь, выбранный в OpenFileDialog.
Затем в обработчике обновления примените свою логику обновления к сохраненному пути.

private string thePath;

public async void OpenFileBtn_ClickAsync(object sender, EventArgs e)
{
   using(OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text File|*.txt", Multiselect = false })
   {

      if (ofd.ShowDialog() == DialogResult.OK)
      {
         thePath = ofd.FileName;
         Refresh();
      }
   }
}


private void RefreshBtn_Click(object sender, EventArgs e)
{
   Refresh();
}

private void Refresh()
{
   using (StreamReader rd = new StreamReader(thePath))
   {
      //ReaderRichTxtBox.Text = await rd.ReadToEndAsync();
      string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
      ReaderRichTxtBox.Text = lines[lines.Length - 1];
   }
} 


Member 14786879

И если я хочу сделать что-то вроде:
- Поместите текстовое поле, где я устанавливаю время (в минутах).
- Еще одна кнопка, которая при нажатии на нее обновляется каждые минуты, что я писал раньше в текстовом поле?
- Затем кнопка остановки обновления

phil.o

Это требование мне не совсем понятно. Кроме того, это выходит за рамки вашего первоначального вопроса. Пожалуйста, попробуйте сначала сделать это самостоятельно, а затем задайте новый вопрос об этом новом требовании, если вы застряли, в конце концов. Извините, но я не буду писать все это для вас.

Рейтинг:
2

RickZeeland

Поместите эту часть в отдельный метод, который вы можете вызвать из обоих существующих методов:

using (StreamReader rd = new StreamReader(ofd.FileName))
{
    //ReaderRichTxtBox.Text = await rd.ReadToEndAsync();
    string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
    ReaderRichTxtBox.Text = lines[lines.Length - 1];
}

Так что это будет выглядеть примерно так:
private void ReadLastLineFromFile(string fileName)
{
                    using (StreamReader rd = new StreamReader(fileName))
                    {
                        string[] lines = rd.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                        ReaderRichTxtBox.Text = lines[lines.Length - 1];
                    }
}


Рейтинг:
0

Maciej Los

Пожалуйста, прочтите комментарий к ответу: Как прочитать последнюю строку текстового файла, выбранного с помощью этого кода? Или с другим режимом?[^]

Ричард Диминг писал::


Вместо того чтобы читать весь файл в массив, я бы предпочел использовать ReadLines и LastOrDefault. :)

string lastLine = File.ReadLines("fullfilename.txt").LastOrDefault();


Метод File.ReadLines (System.IO) | Microsoft Docs[^]


phil.o

5 б

Maciej Los

Спасибо ;)