最近我们有一位客户提出这样的需求,需要在两个窗体之间拖动表格控件,并且表格能够自动布局,目的是为了对比表格中的数据变化。
在本文中,我们就会介绍如何通过C1FlexGrid for WinForms和FlowLayoutPanl实现这一需求。
我们会创建一个MDI应用系统,用户可以在MDI中创建若干个子窗体,每个窗体都会包括一个FlowLayoutPanel和C1FlexGrid控件。当子窗体添加到MDI中时,我们会设置FlowlayoutPanel的AllowDrop属性为true,使FlowlayoutPanel可以接受拖动上来的对象。
接下来,在C1FlexGrid的MouseCaptureChanged事件中设置FlowLayoutPanel的DragDropEffects属性
void c1FlexGrid2_MouseCaptureChanged(object sender, EventArgs e) { childFlowLayoutPanel.DoDragDrop((sender as C1FlexGrid), DragDropEffects.Move); } void childFlowLayoutPanel_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } 复制代码
操作完成时触发:
void childFlowLayoutPanel_DragDrop(object sender, DragEventArgs e) { C1FlexGrid data = (C1FlexGrid)e.Data.GetData(typeof(C1FlexGrid)); FlowLayoutPanel _destination = (FlowLayoutPanel)sender; FlowLayoutPanel _source = (FlowLayoutPanel)((C1FlexGrid)data).FindForm().Controls["childFlowLayoutPanel"]; if (_source != _destination) { // Add control to panel _destination.Controls.Add(data); } } 复制代码
运行截图:
源码下载:VS2010 + ComponentOne Studio for Windows Forms 2012V2
C#:
- DropFlexGridBetweenForms.zip (16.52 K, 下载次数:13)
VB.NET:
- DropFlexGridBetweenForms_VB.zip (18.96 K, 下载次数:14)