Winform鼠标拖动改变控件大小、移动控件位置

基本逻辑:

1、鼠标移动过程(未按下鼠标左键)进行边界检测,当移动到控件边界时(某范围内),改变显示的光标;

2、此时,若按下鼠标左键(也可是右键),记录鼠标的位置和控件的大小;

3、按下鼠标左键移动过程中,改变控件的大小(三个方向)或者location(五个方向);

4、逻辑完善:进行边界检测;

5、编写为自己的类,可以用于初始化控件使其具有鼠标拖动改变大小的功能。


数据准备:方向枚举,用于记录方向

public enum MouseDirection
    {
        East,
        West,
        South,
        North,
        Southeast,
        Southwest,
        Northeast,
        Northwest,
        None
    }

鼠标移动:这列出了四个方向分别为东南、西北、西南、东北

if (e.Location.X >= control.Width - 5 && e.Location.Y >= control.Height - 5 )
                {
                    control.Cursor = Cursors.SizeNWSE;
                    direction = MouseDirection.Southeast;
                }
                else if (e.Location.X <= 5 && e.Location.Y <= 5 )
                {
                    control.Cursor = Cursors.SizeNWSE;
                    direction = MouseDirection.Northwest;
                }
                
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
如果你想要实现winform picbox通过鼠标左键拖动图片,但不想拖动控件本身,可以按照以下步骤进行: 1. 在窗体上添加一个PictureBox控件,并设置其SizeMode属性为AutoSize,以自适应图片大小。 2. 在PictureBox的MouseDown事件中,判断鼠标左键是否按下,如果是,则记录下鼠标位置和图片的位置。 3. 在PictureBox的MouseMove事件中,判断鼠标左键是否按下,如果是,则计算鼠标移动的距离,并将图片的位置加上这个距离,实现拖动效果。 4. 在PictureBox的MouseUp事件中,将记录的位置信息清空,以便下一次拖动。 以下是示例代码: ```csharp public partial class Form1 : Form { private Point mouseOffset; // 鼠标位置与图片位置的差值 private Point imageLocation; // 图片的位置 public Form1() { InitializeComponent(); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { mouseOffset = new Point(-e.X, -e.Y); imageLocation = pictureBox1.ImageLocation; } } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point mousePos = Control.MousePosition; mousePos.Offset(mouseOffset.X, mouseOffset.Y); pictureBox1.ImageLocation = imageLocation; pictureBox1.ImageLocation = mousePos; } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { mouseOffset = Point.Empty; imageLocation = Point.Empty; } } ``` 这样,就可以通过鼠标左键拖动图片,而不会拖动控件本身。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值