Code Bye

c# 自定义控件鼠标事件响应

本人在UserControl里面添加了一个label控件,在程序添加了鼠标移动拖拽事件,但是实现的是只能拖拽UserControl才能进行移动,选中label并不能进行移动,所以label大小是要比UserControl要小的,且只能选中边框才能进行拖动,但这并不是本人想要的效果。本人想实现选中label就能够进行拖动,并且将这个控件添加到form里面的时候,当拖拽到form之外时不能拖拽出去,原因是目前这个拖拽出去之后就找不回来了。求指导答。
还有,在以上的基础上,能不能做成本人选中边框时进行拖拽可以自行改变label的大小呢?
解决方案

10

你注册label的鼠标事件,然后给label设置背景色(例如透明)。这样Label就能响应鼠标事件了。

30

给你一个参考
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            var c = new myLabel();
            c.Text = "左键移动,右键拉伸";
            Controls.Add(c);
        }
    }
    public class myLabel:Label
    {
        public myLabel()
        {
            //AutoSize = true;
            BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        }
        int ox, oy;
        protected override void OnMouseDown(MouseEventArgs e)
        {
            ox = e.X;
            oy = e.Y;
        }
        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                var rct = Rectangle.Inflate(ClientRectangle, 1, 1);
                rct.Offset(Left + e.X - ox, Top + e.Y - oy);
                if (Parent.ClientRectangle.Contains(rct))
                {
                    Left += e.X - ox;
                    Top += e.Y - oy;
                }
            }
            if (e.Button == MouseButtons.Right)
            {
                Width = e.X;
                Height = e.Y;
            }
        }
    }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c# 自定义控件鼠标事件响应