找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-2 10:02  /   查看:5430  /  回复:0
最近我们有一位客户提出这样的需求,需要在两个窗体之间拖动表格控件,并且表格能够自动布局,目的是为了对比表格中的数据变化。
在本文中,我们就会介绍如何通过C1FlexGrid for WinForms和FlowLayoutPanl实现这一需求。
我们会创建一个MDI应用系统,用户可以在MDI中创建若干个子窗体,每个窗体都会包括一个FlowLayoutPanel和C1FlexGrid控件。当子窗体添加到MDI中时,我们会设置FlowlayoutPanel的AllowDrop属性为true,使FlowlayoutPanel可以接受拖动上来的对象。

接下来,在C1FlexGrid的MouseCaptureChanged事件中设置FlowLayoutPanel的DragDropEffects属性
  1.     void c1FlexGrid2_MouseCaptureChanged(object sender, EventArgs e)
  2.     {
  3.         childFlowLayoutPanel.DoDragDrop((sender as C1FlexGrid), DragDropEffects.Move);
  4.     }
  5.     void childFlowLayoutPanel_DragEnter(object sender, DragEventArgs e)
  6.     {
  7.         e.Effect = DragDropEffects.Move;
  8.     }
复制代码


最后,我们需要捕获FlowLayoutPanel的DrapDrop事件,DrapDrop事件会在拖拽操作完成时触发:
  1.     void childFlowLayoutPanel_DragDrop(object sender, DragEventArgs e)
  2.     {
  3.         C1FlexGrid data = (C1FlexGrid)e.Data.GetData(typeof(C1FlexGrid));
  4.         FlowLayoutPanel _destination = (FlowLayoutPanel)sender;
  5.         FlowLayoutPanel _source = (FlowLayoutPanel)((C1FlexGrid)data).FindForm().Controls["childFlowLayoutPanel"];

  6.         if (_source != _destination)
  7.         {
  8.             // Add control to panel
  9.             _destination.Controls.Add(data);
  10.         }
  11.     }
复制代码


运行截图:


源码下载:VS2010 + ComponentOne Studio for Windows Forms 2012V2

C#:
VB.NET:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部