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