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


Автор: foxygun 10.5.2009, 23:48
Всем привет! 

Можно ли в компоненте treeView, вместо значков "+" и "-" выводить изображения (иконки)?

Слышал, что нужно создать ImageList. Но как это сделать?

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

Автор: Partizan 11.5.2009, 00:47
foxygun, нет, ImageList на значки +/- не влияет....


По сабжу читать вот это:

http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.drawnode.aspx

Автор: Redsweet 11.5.2009, 00:48
Есть такой компонент ImageList! Просто добавляшь его и загружаешь в него картинки. А потом в свойствах TreeView присваеваешь созданную коллекцию в ImageList. Таким образом добавится картинка перед каждым элементом дерева.

Автор: Partizan 11.5.2009, 00:51
Redsweet, Назначение ImageList-а объекту TreeView никак не повлияет на отображение +/-....Это только даст возможность рядом с текстом показать нужную иконку...

Автор: Redsweet 11.5.2009, 00:56
Цитата(Partizan @  11.5.2009,  03:51 Найти цитируемый пост)
Redsweet, Назначение ImageList-а объекту TreeView никак не повлияет на отображение +/-....Это только даст возможность рядом с текстом показать нужную иконку...


Но как бы в TreeView и нет плюсов и минусов по умолчанию. Там стрелочки.

Цитата(Partizan @  11.5.2009,  03:47 Найти цитируемый пост)
По сабжу читать вот это:http://msdn.microsoft.com/en-us/library/sy...w.drawnode.aspx


Этот код создает +/-? Как вы разбираетесь в этом английском MSDN? Я в русском и то с трудом... 

Автор: Partizan 11.5.2009, 01:08
Цитата

Но как бы в TreeView и нет плюсов и минусов по умолчанию. Там стрелочки.


ммм...а можно поинтересоваться видели ли вы как оно выглядит в WinXP?
Боюсь вас разочаровать, конечно...но, что "стрелочки" в Vista(у вас ведь Vista, не так ли?), что +/- в XP - это всё от системной темы...и автору, насколько я понимаю, нужно именно в эту часть TreeViewItem-а нарисовать иконку...


Цитата

Как вы разбираетесь в этом английском MSDN? Я в русском и то с трудом... 


Ну тут только могу посоветовать подтянуть английский...

Автор: diadiavova 11.5.2009, 01:32
У TreeView есть свойство ShowPlusMinus. Мне кажется, это -как раз то что надо.  А картинку для конкретных узлов можно менять в обработчиках событий AfterCollapse и AfterExpand например.

Автор: foxygun 11.5.2009, 10:04
Создал ImageList, добавил туда картинки! Установил значение ImageList компонента treeView. Значение Imageindex установил на картинку! 
Для чего поле ImageKey?

ImageIndex позволяет выбрать одну из двух картинок. В результате сего, в treeView, рядом с +/-, отображается одна и таже картинка. 
Почему так? 

Автор: Redsweet 11.5.2009, 10:11
Цитата(Partizan @  11.5.2009,  04:08 Найти цитируемый пост)
ммм...а можно поинтересоваться видели ли вы как оно выглядит в WinXP?

Видела конечно! user posted image


Цитата(Partizan @  11.5.2009,  04:08 Найти цитируемый пост)
Боюсь вас разочаровать, конечно...но, что "стрелочки" в Vista(у вас ведь Vista, не так ли?), что +/- в XP - это всё от системной темы...и автору, насколько я понимаю, нужно именно в эту часть TreeViewItem-а нарисовать иконку...

У меня XP, но с Вистовской темой... От того и стрелочки везде вместо +/-... А я еще понять не могла, где там foxygun нашел +/-! user posted image


Цитата(Partizan @  11.5.2009,  04:08 Найти цитируемый пост)
Ну тут только могу посоветовать подтянуть английский...

Это точно... user posted imageuser posted imageuser posted image

Автор: Partizan 11.5.2009, 10:12
foxygun, в aftercollapse/afterexpand меняйте ImageIndex у TreeNode

Автор: Redsweet 11.5.2009, 10:15
Цитата(foxygun @  11.5.2009,  13:04 Найти цитируемый пост)
ImageIndex позволяет выбрать одну из двух картинок. В результате сего, в treeView, рядом с +/-, отображается одна и таже картинка. Почему так? 

Зайдите в Edit Nodes и меняйте картинку хоть для каждого элемента!

Автор: foxygun 11.5.2009, 10:36
Цитата(Redsweet @  11.5.2009,  10:15 Найти цитируемый пост)
Зайдите в Edit Nodes и меняйте картинку хоть для каждого элемента!


Узлы у меня будут создаваться динамически, а Вы предлагаете вариант, когда узлы создаются "вручную". 

Автор: tososun 3.6.2009, 19:53
Цитата(foxygun @ 11.5.2009,  10:36)
Цитата(Redsweet @  11.5.2009,  10:15 Найти цитируемый пост)
Зайдите в Edit Nodes и меняйте картинку хоть для каждого элемента!


Узлы у меня будут создаваться динамически, а Вы предлагаете вариант, когда узлы создаются "вручную".

Про .Net не знаю, пользую старый, добрый билдер 6.0 - там задачка тривиальная

В ImageList загружаешь три изображения состояния ноды
к примеру:
индекс 0 - закрытая книга
индекс 1 - открытая книга
индекс 2 - лист

в TreeVew

property Images = твоему списку изображений

далее обрабатываем события

void __fastcall TForm1::TreeView1GetImageIndex(TObject *Sender,
      TTreeNode *Node)
{
     if ( Node -> HasChildren ) {
       if ( Node -> Expanded ) {
         Node -> ImageIndex = 1;
    }
    else {
      Node -> ImageIndex = 0;
    }
  }
  else {
    Node -> ImageIndex = 2;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TreeView1GetSelectedIndex(TObject *Sender,
      TTreeNode *Node)
{
  Node -> SelectedIndex = Node -> ImageIndex;
}
//---------------------------------------------------------------------------

И незабудь, к примеру в OnExpended & OnColapsed, перерисовать ноду, 
иначе изображения накладываются

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