Completed
Last Updated: 23 Sep 2022 13:07 by ADMIN
Release R3 2022
Chris
Created on: 20 Apr 2020 06:35
Category: TreeView
Type: Bug Report
1
RadTreeView: multiple selection is lost on right click over a selected node

Please run the attached sample project and follow the steps illustrated in the gif file. You will notice the following behavior:

If you select multiple items/nodes and then right click on the last selected item/node, the context menu comes up as expected and multiple selection is kept. But if you right click on any other item/node that is selected,the selected nodes become unselected and only the node you are over becomes selected. 

The multiple selection is kept in Windows Explorer and VS Solution explorer wne you right click over an already selected node.

Workaround:

        public RadForm1()
        {
            InitializeComponent();

            this.radTreeView1.MultiSelect = true;
            this.radTreeView1.AllowDefaultContextMenu = true; 
        } 

        class CustomTreeViewElement : RadTreeViewElement
        { 
            protected override Type ThemeEffectiveType
            {
                get
                {
                    return typeof(RadTreeViewElement);
                }
            }

            protected override bool ProcessMouseDown(MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    RadContextMenu menu = this.ContextMenu; 
                    RadTreeNode node = this.GetNodeAt(e.Location);
                    if (node!=null)
                    {
                        node.Selected = true;
                    }
                    if (node != null && node.ContextMenu != null)
                    { 
                        menu = node.ContextMenu;
                    } 
                    if (menu == null && this.AllowDefaultContextMenu)
                    {
                        menu = this.InitializeDefaultContextMenu(node);
                    } 
                    if (menu != null)
                    { 
                        RadControl parentControl = (this.ElementTree.Control as RadControl);

                        if (parentControl != null)
                        {
                            menu.ThemeName = parentControl.ThemeName;
                            menu.DropDown.RightToLeft = parentControl.RightToLeft;
                        }

                        TreeViewContextMenuOpeningEventArgs args = new TreeViewContextMenuOpeningEventArgs(node, menu, this);
                        OnContextMenuOpening(args);

                        if (!args.Cancel)
                        {
                            menu.Show(this.ElementTree.Control, e.Location);
                            return true;
                        };
                    }
                }
                return base.ProcessMouseDown(e);
            } 
        }

        class CustomTreeView : RadTreeView
        {  
            protected override RadTreeViewElement CreateTreeViewElement()
            {
                return new CustomTreeViewElement();
            }
           
            public override string ThemeClassName
            {
                get
                {
                    return typeof(RadTreeView).FullName;
                }
            }

            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case 0x7b:
                         
                        return;
                }

                base.WndProc(ref m);
            }
        }

0 comments