Point结构体中Subtract和Add方法在拖曳控件时的应用

本文介绍了一种在Windows窗体应用程序中同步移动两个控件的方法。通过定义全局字段并使用Mouse Down、Mouse Up及Mouse Move事件,实现了拖动其中一个控件时另一个控件也能跟随移动。文中还详细介绍了实现该功能的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  结构体 Point 中方法Subtract()和Add()可用于在同一个坐标系中2点之间相对位置的计算:

public static Point Subtract(
 Point pt,
 Size sz
)

public static Point Add(
 Point pt,
 Size sz
)

而 Size 可以通过 Point 转换, 如下Size的一个构造函数:
public Size(
 Point pt
)

下面以处于同一容器下(Form1)的2个组件 label1, label2 , 当拖曳第一个组件label1时, label2也同时跟着移动.

1. 定义全局字段:

private Point label1StartPos, offsetPoint;
private bool canMove = false;

2. 相关事件方法:

        private void label1_MouseDown(object sender, MouseEventArgs e)
        {
            canMove = true;
            label1StartPos = e.Location;
            offsetPoint = Point.Subtract(label2.Location, new Size(label1.Location));
        }

        private void label1_MouseUp(object sender, MouseEventArgs e)
        {
            canMove = false;
        }

        private void label1_MouseMove(object sender, MouseEventArgs e)
        {
            if (canMove)
            {
                label1.Location = this.PointToClient(Point.Subtract(label1.PointToScreen(e.Location), new Size(label1StartPos)));
                label2.Location = Point.Add(label1.Location, new Size(offsetPoint));
            }
        }

 即可.

转载于:https://www.cnblogs.com/csMapx/archive/2011/10/21/2219864.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值