在两个窗体中实现C1FlexGrid的拖动操作

发布时间:2012/11/16 00:11 发布者:葡萄城产品团队

返回博客中心

最近我们有一位客户提出这样的需求,需要在两个窗体之间拖动表格控件,并且表格能够自动布局,目的是为了对比表格中的数据变化。
在本文中,我们就会介绍如何通过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)

关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网