Управление списком просматриваемых папок / файлов и исключений, в том числе дочерних - PullRequest
0 голосов
/ 21 июня 2010

У меня есть программа, которая следит за изменениями определенных файлов в списке папок, включая дочерние (если папка просматривается, она будет наблюдать за всеми дочерними файлами). Я хочу добавить возможность исключать определенных детей из этого процесса, но я не уверен, как лучше всего это обработать или сохранить «Правила» для этого. Например, вот дерево, которое я мог бы посмотреть:

Root
  Folder1
    SubFolder1
      File1
      File2
  Folder2
    File3
    File4

Я хочу разрешить пользователю выбирать папку (например, «Root»), и она автоматически выбирает все дочерние элементы. Если они снимают флажок с папки (например, Folder1), я хочу снять флажок со всех дочерних элементов этого, но затем, если они проверяют дочерний элемент у ребенка (например, File1), я хочу проверить все его дочерние элементы (или, в этом случае просто посмотрите File1, так как у него нет детей).

Я представляю, что буду хранить эти данные в виде списка узлов, на которых пользователь предпринял какое-то действие (или +, или -), и буду ходить по списку папок, по одному уровню за раз, пока не получу к узлу, где пользователь предпринял другое действие, затем продолжайте идти дальше в папки / файлы, проверяя на каждом шаге, чтобы увидеть, предпринял ли пользователь какие-либо действия на этом узле, в частности, и затем распространяя его на все подчиненные -nodes. Если под отслеживаемым узлом появляется новая папка / файл, я хочу начать его просмотр, но если он появится под игнорируемым узлом, я его проигнорирую.

Должен ли я просто сохранять каждую "действующую" папку / файл, а также действие (просмотр / игнорирование), которое выполнял пользователь, и затем каждый раз восстанавливать целое дерево? Есть ли более эффективный способ сделать это, что я не представляю?

Я с удовольствием уточню, неясно ли мое текущее объяснение того, как я представляю это. Кроме того, я использую .NET, но меня больше интересует общий процесс - я разработаю реализацию.

1 Ответ

1 голос
/ 21 июня 2010

Этого можно добиться с помощью класса TreeView . Исходя из моего опыта, вам нужно будет добавить немного логики для обновления родительских и дочерних узлов после выбора узла, но этого можно достичь, подключив обработчик к одному из событий TreeView . В приложении, которое я создал в прошлом, я полагаю, что я просто использовал событие Click, но после переосмысления этого, «AfterSelect», возможно, был бы лучшим вариантом. Тем не менее, могут быть лучшие события, доступные в реальном классе TreeNode, но я еще не изучал их. Надеюсь, этот пост, по крайней мере, поможет вам начать работу в правильном направлении.

Кстати, класс TreeView не помечен как сериализуемый. Однако вы можете сериализовать корневой TreeNode-а TreeView. Поэтому вы можете сохранить выбранные параметры с помощью двоичной сериализации, XML-сериализации или любым другим методом по вашему выбору.

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