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.此时工具已经被正常加载到工具箱中,可实现手动拖拽等功能
