![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| FasterHarder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Всем программистам привет! Respect! В общем столкнулся с такой проблемкой, суть: есть дерево реестра ОС Windows Treeview. Затем я хочу добавить новое значение для узла(все значения отображаю в listview). Добавив значение мне необходимо как то обновить информацию пользователю. Я просто сворачиваю и разварачиваю родительский узел ближайшей иерархии. Но также необходимо и позиционироваться на модифицированном узле? Подскажите как это можно реализовать? Подскажите как быть то?
P.S. у меня название модифицированного ключа, а также родительский узел по отношению к нему:
юзаю класс RegistryKey. |
|||
|
||||
| FasterHarder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
что то кажется хреново объяснил проблему
1) название узла 2) название родительского узла(3 - й уровень) 3) и позиционирование на только что модифицированном узле Рефрешь делается просто: сворачиванием иерархии третего уровня и разворачивания. Но есть проблема, как из всего множества узлов 4 - го уровня встать на тот, значение которого было модифицировано(название этого узла знаю)? Подскажите как быть то? P.S. какой нить метод элементарный применить скорее всего |
|||
|
||||
| tol05 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
FasterHarder, ИМХО было бы легче, если бы ты не приводил в вопросе ненужные подробности.
Это важно? А если бы ты xml-файл в TreeView выводил и ноды добавлял/удалял, то проблем с позиционированием не было бы? храни где-нибудь ссылку
очень поможет для дальнейших операций (а они появятся как только заказчик увидит твою программу, уж поверь мне на слово Когда ты делаешь что-то с TreeView или конкретной нодой - обновляй эту ссылку
ну и все. В нужный момент вызываешь
-------------------- На хорошей работе и сны хорошие снятся. |
||||||
|
|||||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
А не наоборот? так выйдет, что при смене отображения (например, долой деревья, даёшь листвью!) придётся ковырять и сами бизнес-объекты. И даже если на первое время такое свойство мало где будет задействовано, практика показывает, что "лишние" свойства и методы постепенно будут расползаться по коду, что ещё больше усложнит задачу рефакторинга. |
|||
|
||||
| FasterHarder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
спасибо tol05, я понял как получить тот же узел, но фактически не происходит позиционирования на модифированном узле, т е он не подсвечивается. Я получаю значение узла(имеется аналогия работы с реестром) когда кликну по нему мышой, все значения отображаются в ListView. А в твоем алгоритме проихсходит простой рефрешь при котором новое значение узла(не путать с добавлением нового простого или сложного узла и его названия) не отображается. Т е необходим некий алгоритм, делающий следующее:
1) добавил новое значение(если непонятно, то см. реестр ОС) уже есть 2) необходимо как то обновить даже не сам узел, а только значение, внесенное в пункте 1. этого нет.
т е можно вызвать нажатие этой кнопки, для повторного считывания всех значений этого ключа, в том числе только что введенного. Но как корректно вызвать этот клик? Подскажите как быть то? |
|||
|
||||
| tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Теория - хорошая вещь. Но на практике ... вспоминаешь что теорий много и все остальные - тоже хорошие. конечно НЕ наоборот. Можно в TreeNode использовать свойство Tag для хранения ссылки на забинденный объект... Но как найти ноду конкретного объекта, чтобы изменить ее? Поиском по всем нодам дерева? Прежде всего работа идет в бизнес-слое, с объектами, и юзер-интерфейс - только инструмент отображения результатов работы бизнес-слоя. Если в бизнес-слое объект А заменяется на объект В, то как найти ту ноду, которая отображала A.Text, чтобы отобразить B.Text? А чтобы не было "что при смене отображения (например, долой деревья, даёшь листвью!) придётся ковырять и сами бизнес-объекты" создается над объектом враппер под конкретный контрол. Т.е. есть бизнес-объект BusinessObj, от него делают TreeViewBusinessObj, или ListViewBusinessObj и т.д. Это не сложно, если хранить ссылку Control bindedControl (и свойство типа Control), а в конкретном враппере переопределять свойство под нужный тип. Нечто подобное паттерну "декоратор". Хотя если юзер-интерфейс продуман, то достаточно ссылки только на один тип объектов, а остальные привязки нетрудно вывести из данных в самом слое представления, не трогая бизнес-слой вообще. P.S. mihryak, я конечно могу ошибаться, но... просто я почти 5 месяцев делал один редактор... И выбрал именно этот вариант решения. FasterHarder, Да куда там... Я даже не знаю что такое "реестр ОС" ! А ты говоришь "смотри"... А по поводу
Это сообщение отредактировал(а) tol05 - 28.9.2007, 10:52 -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
| FasterHarder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Всем спасибо, сделал, но не так как описано выше, а вынес просто один кусок в отдельную процедуру. Наверное можно как то сделать и проще, но это и хорошо, есть куда стремиться
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
tol05, вариант с bindedControl ничего так
в разработке UI я не силён, как наши интерфейсщики строят и показывают контролы не в курсе, абизнес-объекты просто реализуют INotifyPropertyChanged |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
все зависит от конкретной заддачи. Я тоже не был в восторге от своего варианта, но он работал надежно. INotifyPropertyChanged - это что? намеренное усложнение UI-слоя? Укрепление связей между бизнесом и рабочими элементами? mihryak, представь себе ситуацию такую: MyObjectCollection содержит сколько угодно MyObject и сколько угодно MyObjectCollection. Это все биндится на дерево, отображается в гридах и рисуется на панелях (синхронно). Это набор "А" Есть еще наборы "В", "С" и "и т.д." Наборы должны не только переключаться с бинданием соответсвенно и с прорисовкой, но и должна быть возможность копирования, перемещения любого объекта (любой коллекции) из одного набора в другой. При этом необходимо проверять уровни допустимого размещения объектов и коллекций, чтобы объект A.Level1.Collection4.Object5 можно было копировать (перемещать) только в В.Level1.Collection4 или в В.Level2.Collection4, но не вместо коллекции (не В напрямую) и не в В.Level2.Collection2. Ну и т.д. Про удаление и создание новых я и не говорю. Так вот как можно привязать Notifier-ы к ноде из набора А, которая вырезана операцией cut и никуда еще не вставлена, потому что идет переключение набора объектов и набор В сначала должен забиндаться в своем исходном состоянии? Все происходит только в слое представления, клики мыши, работа с нодами, обновления контролов. Бизнес-объект трогать нельзя - а вдруг вставка не произойдет? и сколько комбинаций Notifier-ов будет? -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
tol05, повторюсь - за последние года полтора-два я не написал ничего, что было бы видно пользователю напрямую, ну разве что для этого форума что-нибудь простенькое
И ключевая фраза тут - "данный случай", в столкновении с ним не любая концепция (а мой совет был гораздо более концептуальным, чем практическим) устоит. А тема очень интересная, надеюсь, что мне ещё посчастливится (безо всякой иронии говорю!) её решать. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |