DevExpress報表設計器自定義工具箱


一直不太喜歡寫一些東西,最近感覺記性大不如從前,還是把一些摸索的東西記錄下來,方便以后使用。

DevExpress的報表設計器中原有的工具箱是支持刪除,新增工具,但是工具箱卻操作不方便,或者說在特定環境下,自己想要更改整個工具箱的布局,樣式,以及操作方式的時候可以用以下方法實現:

1.拖拽一個ToolBoxControl

 

 

2.定義幾個全局變量(多個事件中會用到)

 private System.Drawing.Design.ToolboxItem itemToolLink = null;
 private XRToolboxService xRToolboxService = null;
 private Dictionary<DevExpress.XtraToolbox.ToolboxItem, System.Drawing.Design.ToolboxItem> toolboxItemsLink = new Dictionary<DevExpress.XtraToolbox.ToolboxItem, System.Drawing.Design.ToolboxItem>();

 

3.實現ToolBoxControl的MouseDown和MouseMove事件

private void toolboxControlReport_MouseDown(object sender, MouseEventArgs e)
        {
            DevExpress.XtraToolbox.ToolboxHitInfo hitInfo = toolboxControlReport.CalcHitInfo(e.Location);
            if (hitInfo == null || !hitInfo.IsInItem || !toolboxItemsLink.TryGetValue(hitInfo.ItemInfo.Item, out itemToolLink))
            {
                itemToolLink = null;
            }
        }

 

 private void toolboxControlReport_MouseMove(object sender, MouseEventArgs e)
        {
            if (itemToolLink != null)
            {
                toolboxControlReport.DoDragDrop(new DataObject(itemToolLink), DragDropEffects.Copy);
                xRToolboxService.SetSelectedToolboxItem(itemToolLink);


                xRToolboxService.SelectedToolboxItemUsed();
                itemToolLink = null;
            }
        }

 

4.加載完成報表之后可執行如下代碼

xRToolboxService = (XRToolboxService)reportDesigner1.ActiveDesignPanel.GetService(typeof(System.Drawing.Design.IToolboxService));
            foreach (string text in xRToolboxService.CategoryNames)
            {
                DevExpress.XtraToolbox.ToolboxGroup group = new DevExpress.XtraToolbox.ToolboxGroup(text);
                IDesignerHost designerHost = (IDesignerHost)reportDesigner1.ActiveDesignPanel.GetService(typeof(IDesignerHost));
                System.Drawing.Design.ToolboxItem[][] array = XRToolboxService.GroupItemsBySubCategory(xRToolboxService.GetToolboxItems(text), designerHost);
                System.Drawing.Design.ToolboxItem[][] array2 = array;
                for (int i = 0; i < array2.Length; i++)
                {
                    System.Drawing.Design.ToolboxItem[] array3 = array2[i];
                    for (int j = 0; j < array3.Length; j++)
                    {
                        DevExpress.XtraToolbox.ToolboxItem itemTool = new DevExpress.XtraToolbox.ToolboxItem();
                        itemTool.Name = itemTool.Caption = ((array3[j] is LocalizableToolboxItem) ? ((LocalizableToolboxItem)array3[j]).DisplayName : array3[j].DisplayName);
                        itemTool.Image = array3[j].Bitmap;
                        toolboxItemsLink.Add(itemTool, array3[j]);
                        group.Items.Add(itemTool);
                    }
                }


                toolboxControlReport.Groups.Add(group);
            }


            if (toolboxControlReport.Groups.Count != 0)
            {
                toolboxControlReport.SelectedGroupIndex = 0;
            }

 

5.此時工具已經被正常加載到工具箱中,可實現手動拖拽等功能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM