本人在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;
}
}
}