|
TreeViewItem
|
|||
---|---|---|---|
#18+
В XAML-е "посажено" деревце: Код: c# 1.
В коде могу получить элемент данных этого дерева, например: Код: c# 1.
Вопрос: Как получить элемент типа TreeViewItem, соответствующий выбранному элементу данных ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2014, 11:19 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Вроде как LogicalTreeHelper.GetParent(tv.SelectedItem) , но не проверял... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2014, 13:35 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
В этом "деревянном зодчестве" столько сюрпризов. Собрал деревянную веточку (без использования ItemsSource) и прицепил ее к дереву: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Дерево "выросло", но обработчик SelectedItemChanged при мышинном выборе не срабатывает. Вроде вполне законный способ. Может чего-то не хватает в настройках дерева? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2014, 14:16 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
LogicalTreeHelper не помог что ли? Да и зачем всё это? Чем здесь MVVM не угодил? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2014, 16:14 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
C LogicalTreeHelper пытаюсь пока не очень выходит. На счет MVVM. Пока в нем не работаю, но мне казалось, что работа с TreeView происходит точно также как в обычном WPF. Хотя утверждать не буду чего не знаю. Второй пример я рассматривал для того, чтобы на совсем простом примере разглядеть как работает TreeView. Но, получил непонятное явление - нет реакции на селекцию узла. Это случай когда деревянные данные введены не через ItemsSource, а напрямую через добавление TreeViewItem в коллекции Items Parent-узлов. В этом случае я изначально мог получить TreeViewItem, чтобы потом их не искать. Но на этом пути получил облом. Так что пока еще ничего не добился. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2014, 19:05 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
ЧитательXC LogicalTreeHelper пытаюсь пока не очень выходит.Что там может "не выходить"? :-) Код: c# 1.
ЧитательXНа счет MVVM. Пока в нем не работаю, но мне казалось, что работа с TreeView происходит точно также как в обычном WPF.В "обычном WPF" делают привязку данных на модель, в данном случае через HierarhicalDataTemplate. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 06:03 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Не получается. См аттач. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 08:44 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
ЧитательXНе получается. См аттач.Согласен, не получится. Тогда можно пробежаться по визуальному дереву как-то так: Код: c# 1. 2. 3.
Исходник VisualTreeHelperEx . ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 09:27 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Пошел по цепочке собирать исходники для исходников. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 09:52 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Написал собственный код для "прогулки" по VisualTree. Но, теперь есть другая проблема. В этом дереве представлены только видимые элементы. Т.е. если дерево свернуто, то виден только корневой TreeViewItem. Но, если мне нужно программно найти узел внутри дерева и развернуть эту веточку. Как искать такой DependencyObject? Его в дереве нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 11:20 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
ЧитательXНо, теперь есть другая проблема. В этом дереве представлены только видимые элементы.Само собой. ЧитательXТ.е. если дерево свернуто, то виден только корневой TreeViewItem. Но, если мне нужно программно найти узел внутри дерева и развернуть эту веточку. Как искать такой DependencyObject? Его в дереве нет.Надо идти с корня дерева и разворачивать по очереди всех "родителей" целевого элемента дерева. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 11:25 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
зы: В этом случае лучше искать TreeViewItem с помощью ItemContainerGenerator.ContainerFromItem. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 11:30 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Тут, как уж повелось, другая беда. Если узлы дерева не открывались, то tvi.ItemContainerGenerator имеет атрибут: Код: c# 1.
и попытка взять TreeViewItem дает null: Код: c# 1.
Может быть есть способ заставить сгенерить контейнеры для всего дерева не прибегая к его полному раскрытию? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 12:57 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
ЧитательXМожет быть есть способ заставить сгенерить контейнеры для всего дерева не прибегая к его полному раскрытию?А зачем? Ведь целью является развёртывание дерева. Открываем. После открытия ItemContainerGenerator будет иметь содержимое, используем его для поиска следующего открываемого элемента. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 13:14 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Никак нет. Дерево должно стартовать либо полностью свернутым, либо частично приоткрым, например, развернут только корень. Потому что если сразу развернуть все дерево, то пользователь визуально окажется где-то глубоко внутри. И каждый раз ему придется совершать операцию выхода на верх и операцию свертывания лишнего. Это очень скоро вызовет буйный протест. (даже пострадают некоторые люди). Поэтому, начальное состояние дерева это частично свернутое состояние. А отсюда и више указанная проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 14:06 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
ЧитательXНикак нет. Дерево должно стартовать либо полностью свернутым, либо частично приоткрым, например, развернут только корень. Потому что если сразу развернуть все дерево, то пользователь визуально окажется где-то глубоко внутри. И каждый раз ему придется совершать операцию выхода на верх и операцию свертывания лишнего. Это очень скоро вызовет буйный протест. (даже пострадают некоторые люди). Поэтому, начальное состояние дерева это частично свернутое состояние. А отсюда и више указанная проблема.Я и не предлагаю разворачивать всё дерево, я предлагаю разворачивать от корня до целевого элемента. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 14:38 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Так вот как до него (до целевого узла) добраться. Ведь изначально вся цепочка контейнеров (исключая видимый корень) имеют состояние NotSarted и поэтому все их дочернее подмножество узлов недоступно для иерархического прохода. Было бы хорошо заставить эти контейнеры стартовать (без развертывания!!!). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2014, 18:52 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
ЧитательXТак вот как до него (до целевого узла) добраться. Ведь изначально вся цепочка контейнеров (исключая видимый корень) имеют состояние NotSarted и поэтому все их дочернее подмножество узлов недоступно для иерархического прохода. Было бы хорошо заставить эти контейнеры стартовать (без развертывания!!!).Само собой, дети создаются после "разворота" родителя. Поэтому, сначала разворачиваем текущий элемент, потом ищем его детей. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2014, 12:45 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Да! я долго бился, чтобы создать все элементы дерева без "разворота". Но, ничего лучшего не нашел чем сделать root.Expandsubtree(); и тут же все свернуть обратно. В принципе такое решение тоже сойдет. Погружение в тонкости функционирования TreeView несколько обескураживает. Требуется слишком много рукоприкладства для того, чтобы попользоваться компонентом. Особенно меня удивило слабая связь между элементом данных Data, который привязан к элементу TreeViewItem и самим этим TreeViewItem. Казалось бы они связаны непосредственно, но получить из Data его контейнер не совсем просто. Отдает какой-то "сыростью" модели. Ну ладно! Поворчал и будет. В общем необходимые действия для работы с деревцем я для себя сформировал. Спасибо за участие в обсуждении и за подсказки. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 10:13 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Алексей КЧитательXНо, теперь есть другая проблема. В этом дереве представлены только видимые элементы.Само собой. ЧитательXТ.е. если дерево свернуто, то виден только корневой TreeViewItem. Но, если мне нужно программно найти узел внутри дерева и развернуть эту веточку. Как искать такой DependencyObject? Его в дереве нет.Надо идти с корня дерева и разворачивать по очереди всех "родителей" целевого элемента дерева. Когда дело доходит до такой ручной работы, уже проще кажется MVVM . Ищите по "Expand all the way up to the root" - как сделать авторазворачиваемые "отсюда и до корня". Как сделать "отсюда и все ветки до конца" - думаю, как-то подобным образом же. На самом деле без MVVM проще только для самых простых примеров, когда, как вы сказали, "чтобы на совсем простом примере разглядеть как работает TreeView". Когда примеры становятся сложнее, то принцип работы меняется. Без MVVM вам придётся писать кучку методов по обходу и разворачиванию-сворачиванию веток. Где эти методы будут? В воздухе висеть? В некоей библиотеке "хелперов для тривью"? А в MVVM у вас вся логика по работе с вашим тривью инкапсулирована в моделях представления будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 10:33 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320Когда дело доходит до такой ручной работы, уже проще кажется MVVM .Алексей КДа и зачем всё это? Чем здесь MVVM не угодил? ЧитательXНа счет MVVM. Пока в нем не работаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 11:00 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320На самом деле без MVVM проще только для самых простых примеров, когда, как вы сказали, "чтобы на совсем простом примере разглядеть как работает TreeView". Когда примеры становятся сложнее, то принцип работы меняется. Без MVVM вам придётся писать кучку методов по обходу и разворачиванию-сворачиванию веток. Где эти методы будут? В воздухе висеть? В некоей библиотеке "хелперов для тривью"? А в MVVM у вас вся логика по работе с вашим тривью инкапсулирована в моделях представления будет.Тут не всё так однозначно, есть и другая точка зрения. Накой мне писать свой класс ViewModel и логику инкапсуляции в него Model, если есть готовый класс TreeViewItem и механизм ItemsControl.ItemContainerGenerator? Разумнее рассматривать класс TreeViewItem как часть ViewModel. Тогда и концепция MVVM применяется и все имеющиеся возможности WPF используются. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 11:07 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Когда дело доходит до такой ручной работы, уже проще кажется MVVM .Алексей КДа и зачем всё это? Чем здесь MVVM не угодил? ЧитательXНа счет MVVM. Пока в нем не работаю... Так я к тому сказал, что проще будет перейти на MVVM. Объём кода в MVVM такой же или меньше, зато структурированности больше. MVVM хуже только для самых простых приложений - там он действительно выглядит ненужным нагромождением монструозных конструкций. Если что, MVVM можно организовать и для отдельно взятой сущности или участка программы. Можно проще ещё сделать - сделать только VM и V. Собственно, WPF только вокруг ВМ и В и построен. Я так написал одно приложеньице, когда надо было к готовой логике интерфейсик приделать. Правда, пришлось (и тому придётся, кто собирается это для своей программы делать) написать некоторую логику в сеттерах и командах, а не просто свойства модели присваивать-считывать, т. к. моя "готовая логика", к которой я интерфейс приделывал, явно не была заточена под MVVM. Но всё равно всё сводится либо к написанию своей собственной "модели"-адаптера для работы с чужой логикой и моей структурой ВМ-В, либо эту модель-адаптер придётся по коду геттеров-сеттеров и команд во вью-модели раскидывать. Короче, нужен будет адаптер. Но даже с таким подходом это лучше, чем городить ручные обходы дерева и методы сворачивания-разворачивания узлов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 11:12 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Алексей КРазумнее рассматривать класс TreeViewItem как часть ViewModel. Тогда и концепция MVVM применяется и все имеющиеся возможности WPF используются. Там когда привязку делаешь, TreeViewItem автоматом генерится как обёртка над привязываемым значением из модели представления, вроде. Я, правда, не понял, почему у ТСа не отрабатывается событие SelectedItemChanged. У меня через MVVM к тому же событию команда привязана и всё отрабатывается, когда я кликаю на невыбранный айтим. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 11:19 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320Алексей КРазумнее рассматривать класс TreeViewItem как часть ViewModel. Тогда и концепция MVVM применяется и все имеющиеся возможности WPF используются. Там когда привязку делаешь, TreeViewItem автоматом генерится как обёртка над привязываемым значением из модели представления, вроде. Я к тому, что TreeViewItem больше относится к генерации представления. Т. е. если охота вручную TreeViewItem добавлять, то в MVVM это лучше делать в коде поддержки - этакая вью-вью-модель. Похожая ситуация, кстати, возникает и когда используешь какой-нибудь knockout в asp.net mvc - так в нокауте тоже есть модели. Тогда эти модели это что, в свете того, что у нас уже есть модели на сервере - "вью модели" или "модели на клиенте"? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 11:23 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320Я, правда, не понял, почему у ТСа не отрабатывается событие SelectedItemChanged. У меня через MVVM к тому же событию команда привязана и всё отрабатывается, когда я кликаю на невыбранный айтим. В своих исследованиях по связыванию Data и TreeViewItem я пытался зайти через "заднее крыльцо" - я создавал дерево путем создания элементов TreeViewItem и втыкания их в TreeView. В этом случае, под рукой был и элемент Data и TreeViewItem. Однако, при таком создании TreeViewItem нужно было самостоятельно соорудить и обработчик для SelectedItemChanged (а может быть я ошибаюсь). А иначе, полученное деревце никак не реагирует на то что в него кто-то тычет мышью. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 11:49 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320user7320пропущено... Там когда привязку делаешь, TreeViewItem автоматом генерится как обёртка над привязываемым значением из модели представления, вроде. Я к тому, что TreeViewItem больше относится к генерации представления. Т. е. если охота вручную TreeViewItem добавлять, то в MVVM это лучше делать в коде поддержки - этакая вью-вью-модель.Я о том, что не надо самому писать аналог класса TreeViewItem со свойствами Content, IsExpanded, IsSelected и т. п. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 12:36 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Алексей Кuser7320пропущено... Я к тому, что TreeViewItem больше относится к генерации представления. Т. е. если охота вручную TreeViewItem добавлять, то в MVVM это лучше делать в коде поддержки - этакая вью-вью-модель.Я о том, что не надо самому писать аналог класса TreeViewItem со свойствами Content, IsExpanded, IsSelected и т. п. Тогда по этой логике и CollectionView может заменить коллеции из VM? Ведь "аналог" класса TreeViewItem во VM не просто свойства такие содержит, но и логику по ленивой загрузке и прочую логику. Например, отрисовку крестика ("можно развернуть"), если айтим содержит потомков, или другого рисунка, если не содержит. Много чего ещё. А как "расширить" подобной функциональностью TreeViewItem? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 13:37 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320Ведь "аналог" класса TreeViewItem во VM не просто свойства такие содержит, но и логику по ленивой загрузке и прочую логику. Например, отрисовку крестика ("можно развернуть"), если айтим содержит потомков, или другого рисунка, если не содержит. Много чего ещё. А как "расширить" подобной функциональностью TreeViewItem?Я не говорил, что модель и HierarhicalDataTemplate не нужны. Всё что нет в TreeViewItem должно быть в модели. Но не надо пихать в модель то что есть в TreeViewItem, только если для этого есть особые причины. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 13:44 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Ведь "аналог" класса TreeViewItem во VM не просто свойства такие содержит, но и логику по ленивой загрузке и прочую логику. Например, отрисовку крестика ("можно развернуть"), если айтим содержит потомков, или другого рисунка, если не содержит. Много чего ещё. А как "расширить" подобной функциональностью TreeViewItem?Я не говорил, что модель и HierarhicalDataTemplate не нужны. Всё что нет в TreeViewItem должно быть в модели. Но не надо пихать в модель то что есть в TreeViewItem, только если для этого есть особые причины. А где я пихаю? Я привязываю. У VM IsExpanded и у V IsExpanded - привязал. Также как у VM текстовое поле и у V тоже есть TextBox - тоже привязал. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 13:48 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320Я привязываю. У VM IsExpanded и у V IsExpanded - привязал.А зачем: 1. Добавить свойство в VM. 2. Добавить привязку данных V <=> VM. Может проще дать логике ссылку на TreeViewItem? Разумеется, это не единственное решение, просто предлагаю об этом подумать. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 13:54 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Я привязываю. У VM IsExpanded и у V IsExpanded - привязал.А зачем: 1. Добавить свойство в VM. 2. Добавить привязку данных V <=> VM. Может проще дать логике ссылку на TreeViewItem? Разумеется, это не единственное решение, просто предлагаю об этом подумать. :-) Вы можете привести пример?.. Хотя, если это связано с вашей работой "Простое решение", где у вас предполагается настолько тесная связь между V и VM, что VM ссылается на V (а не наоборот, как в классике), то не надо. )) Если вы дадите ВМ ссылку на В, то останется ли возможность привязывать несколько В к одной ВМ? Каким образом? И что станет со всеми этими словами "меньше связность - лучше тестирование"? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 14:49 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320Если вы дадите ВМ ссылку на В, то останется ли возможность привязывать несколько В к одной ВМ? Каким образом?Конечно, нет. Если требуется такая возможность - используй классический MVVM на здоровье. :-) Но часто ли это надо? user7320И что станет со всеми этими словами "меньше связность - лучше тестирование"?Тестировать надо модель, а она, обычно, на сервере. Впрочем, "пилите, Шура, пилите, они золотые..." :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 15:01 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
зы: Ещё раз обращаю внимание на фразу: "Это не единственное решение, просто предлагаю об этом подумать". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 15:03 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Алексей Кuser7320Если вы дадите ВМ ссылку на В, то останется ли возможность привязывать несколько В к одной ВМ? Каким образом?Конечно, нет. Если требуется такая возможность - используй классический MVVM на здоровье. :-) Но часто ли это надо? Ладно, дайте ссылку, где у вас пример с привязкой ВМ ко В. Или лучше словами простыми опишите, как вы это делаете. Я вот примерно такой подход применил, когда надо было несколько модальных окон друг на друге показать: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
И для таких штук можно много вложенностей детей сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 15:34 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320Ладно, дайте ссылку, где у вас пример с привязкой ВМ ко В.Это не у меня, это в WPF. :-) Это любой Control+ControlTemplate или UserControl. Тут описано моё видение MVVM, там же табличка с основными преимуществами и недостатками возможных подходов. user7320Я вот примерно такой подход применил, когда надо было несколько модальных окон друг на друге показать. Тут описана работа с окнами. Но я не пойму вопроса. Модели окон связываются наиболее удобным способом: свойствами, событиями или ещё как. В чём интрига? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 15:44 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
Алексей К Тут описана работа с окнами. Но я не пойму вопроса. Модели окон связываются наиболее удобным способом: свойствами, событиями или ещё как. В чём интрига? :-) Да ни в чём. Я просто сделал не по правилам, и боялся, что кто-нибудь увидит и скажет ай-яй-яй. )) Ну, у вас примерно как у меня, только я сразу в DataContext данные пихаю, а не в метод-хелпер. А когда вы делаете "установку содержимого окна" через Код: c# 1. 2.
вы можете потом из этого content свойства раскидать по привязкам в замл-разметке этого окна? Без установки DataContext? И это, вызов нескольких диалоговых окон одно из другого у вас нормально пройдёт? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 18:34 |
|
TreeViewItem
|
|||
---|---|---|---|
#18+
user7320Алексей К Тут описана работа с окнами. Но я не пойму вопроса. Модели окон связываются наиболее удобным способом: свойствами, событиями или ещё как. В чём интрига? :-) Да ни в чём. Я просто сделал не по правилам, и боялся, что кто-нибудь увидит и скажет ай-яй-яй. ))Забей на них. Делай как тебе сегодня удобнее. Не понравится - в новом проекте сделаешь "правильно". Заказчику пофиг как у тебя там написано, ему главное результат а не процесс. user7320Ну, у вас примерно как у меня, только я сразу в DataContext данные пихаю, а не в метод-хелпер.Это да. user7320А когда вы делаете "установку содержимого окна" через Код: c# 1. 2.
вы можете потом из этого content свойства раскидать по привязкам в замл-разметке этого окна? Без установки DataContext?Могу, но это не требуется, поскольку Window является ContentControl-ом, и я в Window вставляю готовое содержимое. В самом Window у меня XAML-разметки нет. user7320И это, вызов нескольких диалоговых окон одно из другого у вас нормально пройдёт?Да, проблем с этим никогда не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2014, 18:50 |
|
|
start [/forum/topic.php?all=1&fid=21&tid=1441159]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 293ms |
total: | 462ms |
0 / 0 |