1. Create a new project with RadTreeView 2. Handle the NodeCheckedChanged event 3. Call the ExpandAll method for the checked node when handling this event 4. Run the project and check the first node
To reproduce: 1. Add a RadTreeView and populate it with nodes at design time. 2. Use the following code snippet: Me.RadTreeView1.AllowDefaultContextMenu = True Me.RadTreeView1.RightToLeft = Windows.Forms.RightToLeft.Yes When you run the application and right click over a node, the context menu is not in RTL mode. Workaround: use the ContextMenuOpening event and set the TreeViewDefaultContextMenu.RightToLeft property to Yes. Private Sub RadTreeView1_ContextMenuOpening(sender As Object, e As TreeViewContextMenuOpeningEventArgs) _ Handles RadTreeView1.ContextMenuOpening Dim defaultMenu As TreeViewDefaultContextMenu = TryCast(e.Menu, TreeViewDefaultContextMenu) If defaultMenu IsNot Nothing Then defaultMenu.DropDown.RightToLeft = Windows.Forms.RightToLeft.Yes End If End Sub
Workaround: class MyTreeView : RadTreeView { protected override RadTreeViewElement CreateTreeViewElement() { return new MyTreeViewElement(); } public override string ThemeClassName { get { return typeof(RadTreeView).FullName; } } } class MyTreeViewElement : RadTreeViewElement { bool IsPerformingEndEdit = false; protected override bool EndEditCore(bool commitChanges) { if (!IsEditing || IsPerformingEndEdit) { return false; } TreeNodeElement nodeElement = GetElement(this.SelectedNode); if (nodeElement == null) { return false; } this.IsPerformingEndEdit = true; if (commitChanges && this.ActiveEditor.IsModified) { SaveEditorValue(nodeElement, this.ActiveEditor.Value); } this.ActiveEditor.EndEdit(); nodeElement.RemoveEditor(this.ActiveEditor); this.InvalidateMeasure(); UpdateLayout(); OnEdited(new TreeNodeEditedEventArgs(nodeElement, ActiveEditor, !commitChanges)); typeof(RadTreeViewElement).GetField("activeEditor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(this, null); this.IsPerformingEndEdit = false; return false; } protected override Type ThemeEffectiveType { get { return typeof(RadTreeViewElement); } } }
I can type to select a node. For example, if I click to select the Car node, then type "V", selection jumps to the "Van" node. I can right-arrow to expand, then type "U" to select the "Useful" node. Resolution: Added two new properties: KeyboardSearchEnabled and KeyboardSearchResetInterval. When set the KeyboardSearchEnabled property to true, user can navigate to an item by typing when RadTreeView is focused. You can set how long the user must wait before searching with the keyboard is reset using the KeyboardSearchResetInterval property.
it appears to work okay on android, but I can't use it from an ipad
RadTreeView - Traverser throws exception if you clear and recreate all sub nodes of some node. Steps to reproduce: 1. Create RadTreeView with one node. 2. Add 100 sub nodes. 3. Clear the sub nodes. 4. Move scroll. WorkAround: private void RefreshNodes() { radTreeView1.BeginUpdate(); this.radTreeView1.TreeViewElement.Scroller.Traverser.Position = groupNode; this.radTreeView1.TreeViewElement.Scroller.Traverser.Reset(); this.radTreeView1.SelectedNodes.Clear(); groupNode.Nodes.Clear(); AddNodes(groupNode.Nodes, 1, 100); groupNode.Expand(); radTreeView1.EndUpdate(); this.radTreeView1.TreeViewElement.Update(RadTreeViewElement.UpdateActions.Reset); }
To reproduce : add a RadTreeView with several nodes and use the following code snippet: this.radTreeView1.AllowDragDrop = true; this.TopMost = true; Note that dragging a node will no longer display the "DropHint" line. Workaround: class CustomDragDropService : TreeViewDragDropService { public CustomDragDropService(RadTreeViewElement owner) : base(owner) { } protected override void UpdateHintPosition(Point mousePosition) { FieldInfo fi = typeof(TreeViewDragDropService).GetField("dropHintWindow", BindingFlags.NonPublic | BindingFlags.Instance); RadLayeredWindow window = fi.GetValue(this) as RadLayeredWindow; window.TopMost = true; base.UpdateHintPosition(mousePosition); } } class CustomTreeViewElement : RadTreeViewElement { //Enable themeing for the element protected override Type ThemeEffectiveType { get { return typeof(RadTreeViewElement); } } //Replace the default drag drop service with the custom one protected override TreeViewDragDropService CreateDragDropService() { return new CustomDragDropService(this); } } class CustomTreeView : RadTreeView { //Replace the default element with the custom one protected override RadTreeViewElement CreateTreeViewElement() { return new CustomTreeViewElement(); } //Enable theming for the control public override string ThemeClassName { get { return typeof(RadTreeView).FullName; } } }
NullReferenceException is thrown, when end edit performs in RadTreeView. To reproduce the issue: 1. Bind the grid to table 2. Add new record programmatically 3. Call BeginEdit of the added node 4. Edit the text of the node from the editor 5. Press ENTER 6. Exception is thrown.
Adding or removing node through BindingList API collapse all nodes in self-referencing hierarchy in RadTreeView.
If you perform radTreeView.Nodes.Clear method and then load new nodes by using the LoadXML method, the drag and drop behavior is corrupted.
The RadTreeView throws exception when the BindingSource.CancelEdit is invoked.
Vertical scroll bar is not shown if the expanded node's child nodes have been collapsed in NodeExpandChanged event previously. The code snippet bellow causes the issue: void radTreeView1_NodeExpandedChanged(object sender, RadTreeViewEventArgs e) { bool isExpanded = e.Node.Expanded; if (!isExpanded) { foreach (RadTreeNode node in e.Node.Nodes) { node.Expanded = false; } } }
When the RadTreeView is disabled, nodes text is rendered as bold text.
The SelectedNodes collection is not cleared, when the clear all nodes in single selection mode.
The node find methods of RadTreeView should not perform over the inernal RootTreeNode.
If you add nodes in the following manner: Private arCategories() As String = {"Not Used", "Category1", "Category2", "Category3", "Category4", "Category5"} Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim node As RadTreeNode node = Me.RadTreeView1.Nodes.Add(arCategories(1)) node.Image = My.Resources.img1 AddItems(node) node = Me.RadTreeView1.Nodes.Add(arCategories(2)) node.Image = My.Resources.img2 AddItems(node) node = Me.RadTreeView1.Nodes.Add(arCategories(3)) node.Image = My.Resources.img3 AddItems(node) node = Me.RadTreeView1.Nodes.Add(arCategories(4)) node.Image = My.Resources.img4 AddItems(node) node = Me.RadTreeView1.Nodes.Add(arCategories(5)) node.Image = My.Resources.img5 AddItems(node) For Each nd As RadTreeNode In Me.RadTreeView1.Nodes For Each n As RadTreeNode In nd.Nodes n.Image = nd.Image Next Next End Sub Private Sub AddItems(ByVal node As RadTreeNode) For i As Integer = 1 To 4 node.Nodes.Add("Item" & i) Next End Sub the vertical scroll is not calculated correctly.
The RadTreeView throws NullReferenceException when scrolling is performed if it is loaded from xml document. Loading the following xml document causes the issue: <TreeView xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ShowLines="true"> <Nodes Expanded="true" Text="Test1" ImageIndex="0"> <Nodes Expanded="true" Text="Test2" ImageIndex="0"> <Nodes Expanded="true" Text="Test3" ImageIndex="2"> <Nodes Expanded="true" Text="Test4" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test5" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test6" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test7" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> <Nodes Expanded="true" Text="Test18" ImageIndex="1"> <Nodes Text="Test9" ImageIndex="3" /> <Nodes Text="Test10" ImageIndex="3" /> </Nodes> <Nodes Expanded="true" Text="Test11" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test12" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test13" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> <Nodes Expanded="true" Text="Test14" ImageIndex="1"> <Nodes Text="Test15" ImageIndex="3" /> <Nodes Text="Test16" ImageIndex="3" /> <Nodes Expanded="true" Text="Test17" ImageIndex="4"> <Nodes Expanded="true" Text="Test18" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test19" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test20" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> </Nodes> </Nodes> </Nodes> <Nodes Expanded="true" Text="Test20" ImageIndex="2"> <Nodes Expanded="true" Text="Test21" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test22" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test23" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> <Nodes Expanded="true" Text="Test24" ImageIndex="1"> <Nodes Text="Test25" ImageIndex="3" /> <Nodes Text="Test26" ImageIndex="3" /> <Nodes Text="Test27" ImageIndex="3" /> <Nodes Text="Test28" ImageIndex="3" /> </Nodes> <Nodes Expanded="true" Text="Test29" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test30" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test31" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> </Nodes> </Nodes> <Nodes Expanded="true" Text="Test32" ImageIndex="0"> </Nodes> <Nodes Expanded="true" Text="Test33" ImageIndex="0"> <Nodes Expanded="true" Text="Test34" ImageIndex="0"> <Nodes Expanded="true" Text="Test35" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test36" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test37" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test38" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> <Nodes Expanded="true" Text="Test39" ImageIndex="1"> <Nodes Text="Test40" ImageIndex="3" /> <Nodes Text="Test41" ImageIndex="3" /> </Nodes> <Nodes Expanded="true" Text="Test42" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test43" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test44" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test45" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test46" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> </Nodes> <Nodes Expanded="true" Text="Test47" ImageIndex="0"> <Nodes Expanded="true" Text="Test48" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test49" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test50" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> <Nodes Expanded="true" Text="Test51" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test52" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test53" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> </Nodes> <Nodes Expanded="true" Text="Test54" ImageIndex="0"> <Nodes Expanded="true" Text="Test55" ImageIndex="1" BackColor="232,255,232" NumberOfColors="1"> <Nodes Text="Test56" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test57" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test58" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test59" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> <Nodes Text="Test60" ImageIndex="3" BackColor="232,255,232" NumberOfColors="1" /> </Nodes> </Nodes> </Nodes> </Nodes> </TreeView>
When you change the dock state of window in RadDock, the hosted RadTreeView shows only the nodes from first level, if data relation binding is used.
Add TreeViewXml property to RadTreeView that allows xml serialization by string type