winform实现可拖动的自定义Label控件

作者:炒饭君 时间:2022-12-14 09:11:36 

本文实例为大家分享了winform可拖动的自定义Label控件,供大家参考,具体内容如下

效果预览:

winform实现可拖动的自定义Label控件

实现步骤如下:

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

winform实现可拖动的自定义Label控件

winform实现可拖动的自定义Label控件

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


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);
   }
 }
}

来源:https://blog.csdn.net/a1061747415/article/details/47656307

标签:winform,拖动,Label
0
投稿

猜你喜欢

  • Knife4j 3.0.3 整合SpringBoot 2.6.4的详细过程

    2023-11-25 03:54:34
  • Android自定义View实现炫酷进度条

    2023-09-22 00:16:07
  • MyBatis逆向工程的创建和使用

    2022-07-18 20:07:55
  • Jmeter 中 CSV 如何参数化测试数据并实现自动断言示例详解

    2023-10-17 15:37:42
  • 详解Java数据库连接JDBC基础知识(操作数据库:增删改查)

    2023-08-22 23:47:37
  • Android 6.0指纹识别App开发案例

    2021-06-05 10:30:07
  • PowerManagerService之唤醒锁的使用获取创建示例解析

    2021-09-29 06:42:22
  • 解决SpringMVC项目连接RabbitMQ出错的问题

    2022-12-22 13:05:51
  • Java properties 和 yml 的区别解析

    2023-04-01 22:28:09
  • SpringBoot整合Shiro实现登录认证的方法

    2022-03-23 01:12:19
  • 超全MyBatis动态代理详解(绝对干货)

    2023-11-14 02:28:19
  • Android完整Socket解决方案

    2023-12-22 14:42:40
  • 浅析Spring 中 Bean 的理解与使用

    2023-07-09 03:12:03
  • C#深浅拷贝的深入解析

    2023-03-28 18:36:28
  • Android Loader的使用以及手机通讯录的获取方法

    2023-12-22 02:10:05
  • 基于C#实现获取本地磁盘目录

    2021-08-21 12:51:43
  • Android 游戏开发入门简单示例

    2023-05-02 07:29:56
  • JavaWeb入门:HttpResponse和HttpRequest详解

    2022-09-05 16:44:31
  • 快速解决Android适配底部返回键等虚拟键盘的问题

    2021-10-25 14:50:23
  • 带你重新认识MyBatis的foreach

    2023-11-21 08:44:54
  • asp之家 软件编程 m.aspxhome.com