Greymos писал(а):В TreeView есть возможность установить CheckBoxes. Это замечательно, но при его установке это значение получают все узлы дерева. Есть ли возможность устанавливать это свойство для отдельных узлов? Т.е. родительские узлы будут группами свойств, а на дочерних пользователь ставит чеки там где нужно.
'Строю узлы
Dim Node1, Node2, Node3 As TreeNode
Node1 = TreeView1.Nodes.Add("AAA")
Node2 = Node1.Nodes.Add("aaa")
Node3 = Node2.Nodes.Add("1")
Node3 = Node2.Nodes.Add("2")
Node3 = Node2.Nodes.Add("3")
TreeView1.ExpandAll()
' Создаю ImageList для TreeView
Dim myImageList As New ImageList
myImageList.Images.Add(Image.FromFile("PLUS.BMP"))
' Связываю ImageList с TreeView
TreeView1.ImageList = myImageList
' Ставлю значение картинки по умолчанию
TreeView1.ImageIndex = 1
Dim pnt As System.Drawing.Point
pnt.X = e.X
pnt.Y = e.Y
If e.Button = MouseButtons.Right Then
TreeView1.SelectedNode = TreeView1.GetNodeAt(e.X, e.Y)
TreeView1.SelectedNode.ImageIndex = 0
End If
Я не вижу у себя такого поведения. Всё прекрасно работает. И даже без кода в обработчике MouseUp.еперь собственно вопрос. 'Почему при таком коде рисунок появляется на узле выбранном до этого?
Nord777 писал(а):Я не вижу у себя такого поведения. Всё прекрасно работает. И даже без кода в обработчике MouseUp.
Кудаж она денется то? Ты вот что... Попробуй вставить картинки не в runtime'e, а в дизайнере форм. ListView должен подставлять нужные картинки автоматом, без всяких обработчиков. Если ничего не получиться, скидывай проект. Посмотрю.Без MouseUp картинка вставляться не будет
Наверное придется рисовать самому. Создай новый класс (наследуясь от treeview) и перекрой метод OnDrawNode. В нем и рисуй свой нестандартный узел.При этом рисунок должен оставаться при узле не смотря ни на сворачивание и разворачивание родительского узла
Nord777 писал(а):Наверное придется рисовать самому. Создай новый класс (наследуясь от treeview) и перекрой метод OnDrawNode. В нем и рисуй свой нестандартный узел.При этом рисунок должен оставаться при узле не смотря ни на сворачивание и разворачивание родительского узла
TreeView1.ImageIndex = 1
TreeView1.SelectedImageIndex = 1
Dim nodeclick As TreeNode
nodeclick = TreeView1.SelectedNode
nodeclick.ImageIndex = 0
nodeclick.SelectedImageIndex = 0
Public Class Form1
Dim ImList As New ImageList
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
'Загрузить из ресурсов картинки состояния
ImList.Images.Add("Check", My.Resources.bmpCheck)
ImList.Images.Add("UnCheck", My.Resources.bmpUnCheck)
MyTreeView1.ImageList = Nothing
MyTreeView1.CheckBoxes = False
MyTreeView1.StateImageList = ImList
MyTreeView1.Nodes.Clear()
'Добавить корневые ветки
For i As Integer = 0 To 4
MyTreeView1.Nodes.Add("Root" & i.ToString)
Next
Dim ParentNode, ChildNode As TreeNode
'Пройтись по всем корневым веткам...
For i As Integer = 0 To MyTreeView1.Nodes.Count - 1
ParentNode = MyTreeView1.Nodes(i)
'и в каждую добавить по три дочерних
For i1 As Integer = 0 To 2
ChildNode = ParentNode.Nodes.Add("Child" & i.ToString & "." & i1.ToString)
ChildNode.StateImageKey = "UnCheck"
Next
Next
End Sub
Private Sub MyTreeView1_AfterCheck(ByVal sender As Object, _
ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles MyTreeView1.AfterCheck
With e.Node
If .Checked Then .StateImageKey = "Check" Else .StateImageKey = "UnCheck"
End With
End Sub
Private Sub MyTreeView1_MouseClick(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyTreeView1.MouseClick
Dim TVHTI As TreeViewHitTestInfo = MyTreeView1.HitTest(e.Location)
If TVHTI.Location = TreeViewHitTestLocations.StateImage Then
TVHTI.Node.Checked = Not TVHTI.Node.Checked
End If
End Sub
End Class
Nord777 писал(а): Dim TVHTI As TreeViewHitTestInfo = MyTreeView1.HitTest(e.Location)
Если стоит Framework 2.0, то HitTest должен быть, если не стоит, то никто не мешает его поставить. Он бесплатный.Вот только нельзя ли без TreeViewHitTestInfo и HitTest, а то у меня 2003 и другого нет.
Nord777 писал(а):Если стоит Framework 2.0, то HitTest должен быть, если не стоит, то никто не мешает его поставить. Он бесплатный.Вот только нельзя ли без TreeViewHitTestInfo и HitTest, а то у меня 2003 и другого нет.
[url=http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&DisplayLang=ru]Дистрибутивный пакет Microsoft .NET Framework 2.0 (x86)
[/url]
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 74