Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Расширение TreeView


Автор: rubbiroid 3.3.2008, 20:54
Доброго времени суток!
Долго мучался сам. но что-то пока туго. Суть проблемы - хочу изменить стандартный TreeView до того. что изображено на картинке:
http://img210.imageshack.us/my.php?image=treeviewoy7.gif
Если я правильно понимяю, то нужно в событии OnPaint вставить свой код, который будет рисовть то, что мне надо (цветные цифры с скобках). Или я совсем не туда полез и нужно просто искать новый контролл?

Автор: CYBERDREAM 5.3.2008, 10:53
Если ты в тривью хочешь увидеть количество файлов в каждой категории (то бишь директории), то тогда необходимо узнавать кол-во файлов по данному пути. Сформулируй конкретнее, что должно отображаться?
Если вышеупомянутый вариант, то 
Код

foreach (string dir in Directory.GetDirectories(treeView1.Nodes[0].FullPath))
            {
                try
                {

                    treeView1.Nodes[0].Nodes.Add(Path.GetFileName(dir) + "  (" + Directory.GetFiles(dir).Length+")");
                }
                catch
                {
                    treeView1.Nodes[0].Nodes.Add(Path.GetFileName(dir));
                }
            }
Конечно можно рекурсивно обходить, но это уже отдельная степь smile 

Автор: rubbiroid 5.3.2008, 19:27
Не совсем. Я хочу, чтобы это число отображалось в другом форматировании, чем название ноды. Например как на картинке, другим цветом.

Автор: Unsane 5.3.2008, 20:14
Выставляешь DrawMode у  TreeView в OwnerDrawText и определяешь событие DrawNode.
Далее следуя своей логике перерисоввываешь строку как тебе угодно.
Вот пример:
Код

        private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
        {
            Graphics g = e.Graphics;
            Font f = new Font(treeView1.Font, FontStyle.Bold);
            g.DrawString(e.Node.Text, treeView1.Font, Brushes.Black, e.Bounds);
            g.DrawString("[Some Text]", f, Brushes.Aquamarine, new PointF(e.Bounds.X + e.Bounds.Width, e.Bounds.Y));
        }

Автор: rubbiroid 5.3.2008, 21:25
Большое тебе спасибо!
Может посоветуешь хорошую унижку по GDI+ и создание собственных контроллов?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)