效果预览:




实现步骤如下:

(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. Oracle数据库,join多表关联方式、union结果集合并

    join on :   多表关联 内连接 :与其他表连接 from 表1 t join 表2 s on t.字段1 =s.字段2 join 表3 n on n.字段3=t.字段1 或 from 表1 ...

  2. CI框架源码阅读笔记8 控制器Controller.php

    最近时间有些紧,源码阅读系列更新有些慢.鉴于Controller中代码比较少,本次Blog先更新该文件的源码分析. 在经过路由分发之后,实际的应用Controller接管用户的所有请求,并负责与用户数 ...

  3. linux非常用但很有用的命令

    查找指定目录下包含指定字符串的所有文件 grep -rl 'abc' / top查看命令的完整启动路径 top 按c top以MB为单位显示内存信息 top -M 查看内存top io趋势 pidst ...

  4. 设计模式之 面向对象的养猪厂的故事,C#演示(一)

    对于设计模式, 从本质上说, 其最大的用途就是适应需求的变化. 因为有了设计模式,我们可以在设计阶段就为未来可能发生的变化留下足够的空间. 我们通过一个建造现代化养猪场的故事, 来讨论一下设计模式与需 ...

  5. 在Java中如何实现“Pless presss any key to continue.”

    import java.util.*; class Continue{ public static void main(String[] args){ Scanner scanner=new Scan ...

  6. svg-filter高斯模糊

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. css知多少(4)——解读浏览器默认样式

    上一节<css知多少(3)——样式来源与层叠规则>介绍了样式的五种来源,咱们再通过一张图回顾一下. 对于上面的三层,咱们大概都比较熟悉了.下面的两层中,用户自定义样式一般也就是改一改字号大 ...

  8. 使用 Google Analytics 跟踪 JavaScript 错误

    Google Analytics(谷歌分析)不仅仅是一个流量统计工具,你还可以用它来测量广告活动的有效性,跟踪用户多远到所需的页面流(从点击广告到购物车到结账页面)获取,并基于用户的信息设置浏览器和语 ...

  9. CSS3动画处理浏览器内核时候前缀(兼容性)

    Gecko内核   css前缀为"-moz-" 火狐浏览器 WebKit内核 css前缀为"-webkit-"    Comodo Drangon(科摩多龙), ...

  10. css3加载ing动画

    项目中ajax交互成功前总会需要给用户提醒,比如请稍候.正在加载中等等,那个等待的动图以前项目中用的是gif,在移动端画质很渣,有毛边,于是在新项目中用css3展示加载中的动画效果. function ...