让你的Winform应用在运行时可自由拖放控件位置

本文介绍如何实现Winform应用中控件在运行时的自由拖放功能,允许用户根据喜好调整界面布局,如查询条件和业务数据输入区的位置。通过DragDropAgent类,实现了groupBox的拖放操作,包括拖出和放入,同时使用配置文件保存用户设定。
摘要由CSDN通过智能技术生成

有这样一个场景,有AB两个客户总对界面摆放有着不同的喜好,一个喜欢查询条件输入区(被放在一个groupbox中)在界面的上半部分,输入区在下半部分(被放在另一个groupbox中),另一个用户则正好相反,所以我们在界面设计确认时今天A在时,我们听他的要求,改一次,明天A去开会了,B来确认,又让我们改回来,几次下来,觉得很痛苦,如果界面有区多的区域,比如说一个查询条件输入区、一个业务数据录入区、一个输出区,这种情况下,客户的喜好更是会让你左改右改,所以我们最后决定提供以GroupBox为单位的,运行时可拖拽上下位置的功能,让不同的客户根据自己的喜好去拖拽,我们后台自动保存设定就是了。

场景描述很复杂,但代码实现却很简练:

一个全权负责拖放管理的类实现:

using System;
using System.Windows.Forms;
namespace Subindex
{
 /// <summary>
 ///
 /// </summary>
 public  class DragDropAgent//4 groupBox control in runtime dragDrop support, Written By Linnet 2006-4-6
 {
  private DragDropAgent()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  /// <summary>
  /// 得到一个包含首层父控件的控件的对象名,如form1下groupbox1中的textbox1,将返回form1.textbox1
  /// </summary>
  /// <param name="sender">要获得对象名的控件实例</param>
  /// <returns></returns>
  public static string getFullName(Control sender)
  {
   string name=sender.Name;
   while (sender.Parent!=null)
    sender=sender.Parent;
   return sender.Name+"."+name;
  }

  /// <summary>
  /// 设置指定GroupBox控件的拖放操作,根据CanDrag和CanDrop决定拖出/放入的支持
  /// </summary>
  /// <param name="sender">要设置拖放特性的GroupBox对象</param>
  /// <param name="CanDrag">是否可以拖出</param>
  /// <param name="CanDrop">是否可以放入</param>
  public static void DragDropHook(GroupBox sender,bool CanDrag,bool CanDrop)
  {
   if (CanDrag) DragHook(sender);
   if (CanDrop) DropHook(sender); 
   gutPosition(sender);
  }

  /// <summary>
  /// 设置指定GroupB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值