C # Как автоматически обновить данные из текстового файла, когда Usercontrol становится активным? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть форма с загрузкой кнопок и пользовательских контроллеров для каждой кнопки.

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

У другого usercontrol есть флажок, который также загружает элементы из текстового файла.Здесь вы можете удалить элементы из контрольного списка и строки (элементы) из текстового файла, который обновляет как контрольный список, так и текстовый файл.

Проблема: при переходе от UserControl к UserControl он не обновляет / не обновляетlistbox или checklistbox из текстового файла после любых изменений.

Ожидание: Каждый раз, когда форма или любой пользовательский контроль активны, он должен автоматически обновлять / обновлять свои данные из текстового файла.

Это загружает текстовый файл в первом UC (1) в список.

    private void ucAddNewPerson_Load(object sender, EventArgs e)
    {

        System.IO.StreamReader ReadFile = new System.IO.StreamReader(@"D:\Projects\APPAR\Budget app\PersonList.txt");

        string line;
        while ((line = ReadFile.ReadLine()) != null)
        {
            PersonListBox.Items.Add(line);
        }

        ReadFile.Close();

        if (ReadFile == null)
        {
            PersonListBox.Items.Clear();
        }
    }

Есть ли способ сделать автоматическую загрузку изменений или мне нужно добавить кнопку обновления для решения этой проблемы?

Заранее спасибо!

1 Ответ

1 голос
/ 16 апреля 2019

Посмотрите на класс FileSystemWatcher. Он будет генерировать события при изменении файла, после чего вы сможете перезагрузить свой элемент управления. Код выглядит примерно так:

      public void watchFile()
      {
         var watcher = new FileSystemWatcher(@"D:\Projects\APPAR\Budget app\", "PersonList.txt")
         {
            NotifyFilter = NotifyFilters.LastWrite
         };
         watcher.Changed += (sender, args) => RefreshControl(this);
      }
...