效果预览:




实现步骤如下:

(1)首先在项目上右击选择:添加->新建项,添加自定义控件






(2)自定义的一个Label让它继承LabelControl控件,LabelControl控件是DevExpress控件库里面的一种,和Label控件差不多,想了解更多关于DevExpress控件,推荐到DevExpress控件论坛学习:http://www.dxper.net/

    public partial class LabelModule : LabelControl


(3)这个Label需要实现的MouseDown。

        private void LabelModule_MouseDown(object sender, MouseEventArgs e)

        {

            IsMouseDown = true;

            MousePrePosition = new Point(e.X, e.Y);

            this.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;

            this.Cursor = Cursors.SizeAll;

        }

(4)MouseUp,也就是鼠标弹起的方法。

        private void LabelModule_MouseUp(object sender, MouseEventArgs e)

        {

            IsMouseDown = false;

            this.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;

            this.Cursor = Cursors.Default;

        }

(5)MouseMove,也就是鼠标移动时的方法。

private void LabelModule_MouseMove(object sender, MouseEventArgs e)

        {

            if (!IsMouseDown) return;

            this.Top = this.Top + (e.Y - MousePrePosition.Y);

            this.Left = this.Left + (e.X - MousePrePosition.X);

}

e.X,e.Y 指的是:鼠标的坐标因所引发的事件而异。例如,当处理 Control.MouseMove 事件时,鼠标的坐标值是相对于引发事件的控件的坐标。一些与拖放操作相关的事件具有相对于窗体原点或屏幕原点的关联的鼠标坐标值。

完整代码:LabelModule.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using DevExpress.XtraEditors;



namespace IJPrinterSoftware

{

    public partial class LabelModule : LabelControl

    {

        private bool IsMouseDown = false;

        private Point MousePrePosition;

        

        private void init()

        {

            InitializeComponent();

            this.MouseDown += new MouseEventHandler(LabelModule_MouseDown);

            this.MouseUp += new MouseEventHandler(LabelModule_MouseUp);

            this.MouseMove+=new MouseEventHandler(LabelModule_MouseMove);

        }



        public LabelModule()

        {

            init();

        }



        private void LabelModule_MouseDown(object sender, MouseEventArgs e)

        {

            IsMouseDown = true;

            MousePrePosition = new Point(e.X, e.Y);

            this.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple;

            this.Cursor = Cursors.SizeAll;

        }



        private void LabelModule_MouseUp(object sender, MouseEventArgs e)

        {

            IsMouseDown = false;

            this.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;

            this.Cursor = Cursors.Default;

        }



        private void LabelModule_MouseMove(object sender, MouseEventArgs e)

        {

            if (!IsMouseDown) return;

            this.Top = this.Top + (e.Y - MousePrePosition.Y);

            this.Left = this.Left + (e.X - MousePrePosition.X);

        }

    }

}

版权声明:欢迎关注我的博客,本文为博主toyking原创文章,未经博主允许不得转载。

winform 可拖动的自定义Label控件的更多相关文章

  1. 自定义Label控件

    最近开发过程中有一个需求就是修改label控件的模板,使其能够在鼠标移近的时候变成TextBox,从而方便输入,然后进行相应的修改,最终达到动态修改Label的目的,这里贴出相应的代码,并做简要的分析 ...

  2. winform学习(7)Label控件、Button控件、TextBox控件

    Label控件是System.Windows.Forms.Label 类提供的控件. 作用:主要用来提供其他控件的描述文字,例如:登录窗体上的用户名.密码(输入框前面的字) Button控件是Syst ...

  3. C# winform自定义Label控件使其能设置行距

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  4. C#Winform VScrollBar+Pannel自定义列表控件(原)

    该控件的主要实现思路是用的objective-c中的自定义控件思路,主视图中放子视图 效果图 (窗体调用代码) public partial class Form1 : RibbonForm { Li ...

  5. Winform自定义键盘控件开发及使用

    最近有学员提出项目中要使用键盘控件,系统自带的osk.exe不好用,于是就有了下面的内容: 首先是进行自定义键盘控件的开发,其实核心大家都知道,就是利用SendKeys.Send发送相应 的字符,但是 ...

  6. 在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件

    在很多时候,我们做一些非常规化的界面的时候,往往需要创建一些用户控件,在其中绘制好一些基础的界面块,作为后续重复使用的一个单元,用户控件同时也可以封装处理一些简单的逻辑.在开发Winform各种类型项 ...

  7. Label控件如何根据字符串自定义大小

    一.. this.label_Msg.AutoSize = false;  //设置label空件不能自动大小 二.. 用代码控制label控件的大小 1.根据字符串.label的宽度 计算字符串的面 ...

  8. WinForm使用Label控件模拟分割线(竖向)

    用Label控件进行模拟 宽度设为1:this.lblPagerSpliter1.Size = new System.Drawing.Size(1, 21); 去掉边框:this.lblPagerSp ...

  9. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...

随机推荐

  1. 值栈(Structs2)

    1. 关于值栈: 1). 登陆 时, ${userName} 读取 userName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ValueStack: I. ...

  2. Scalaz(17)- Monad:泛函状态类型-State Monad

    我们经常提到函数式编程就是F[T].这个F可以被视为一种运算模式.我们是在F运算模式的壳子内对T进行计算.理论上来讲,函数式程序的运行状态也应该是在这个运算模式壳子内的,也是在F[]内更新的.那么我们 ...

  3. mysql 导入text 到数据库

    load data local infile 'f:/PhoneLocation_201601.327665.txt' into table sys_t_phone_area fields termi ...

  4. CentOS 6.5下Redis安装详细步骤

    Redis简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...

  5. 两个与spring事务相关的问题

    有些spring相关的知识点之前一直没有仔细研究:比如spring的事务,并不是没有使用,也曾经简单的在某些需要事务处理的方法上通过增加事务注解来实现事务功能,仅仅是跟随使用(甚至并未测试过事务的正确 ...

  6. mysql 5.6启用强密码

    mysql的密码策略通过插件的方式进行检查,插件的名称是validate_password,可通过如下方式安装: mysql> INSTALL PLUGIN validate_password ...

  7. ImFire即时通讯系统构建(架构)

    msgServer集群(ms) 设计作用: 该服务主要提供客户端的接入服务.每个ms维护当前接入用户的用户状态和心跳,每个ms地位是对等的. 设计考虑: ms之间不会直接交互,减少交互的复杂度.在用户 ...

  8. CSS3与页面布局学习笔记(一)——概要、选择器、特殊性与刻度单位

    web前端开发者最最注的内容是三个:HTML.CSS与JavaScript,他们分别在不同方面发挥自己的作用,HTML实现页面结构,CSS完成页面的表现与风格,JavaScript实现一些客户端的功能 ...

  9. 使用 FocusPoint.js 实现图片的响应式裁剪

    通常网站的布局都不是单一的.例如图像在电脑.平板和智能手机上可能显示的形状是不同的.特别是如果你使用的是全屏图像,在你必须使用相同的图像文件的情况下,你的主题可能会被截断或完全缺失,或者看起来很尴尬. ...

  10. 优秀的CSS框架---bootstrap

    Bootstrap是Twitter推出的一个用于前端开发的开源工具包.它 由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架.现在在网上已经有 ...