微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 同时移动2个表单

在这里停留了一下.我试图在不使用OnMove,LocationChanged,Docking等的情况下同时移动2个表单.

与其位置进行交互的唯一方法是覆盖WndProc.可能有用的东西是表单A是表单B的所有者.因此,每当A移动时,我也想移动B.不是相同的位置,但相同的距离.

protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0084)
        {
              Form[] temp = this.OwnedForms;

              if(temp.Length > 0) 
              {
                    /* moving temp[0] to the same ratio as this form */
              }

              m.Result = (IntPtr)2;
              return;
        }
        base.WndProc(ref m);
    }

A和B都具有相同的WndProc,因为它们是来自同一类的2个对象.

解决方法

避免使用LocationChanged事件没有任何意义:

private Point lastPos;

    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        lastPos = this.Location;
    }

    protected override void OnLocationChanged(EventArgs e) {
        base.OnLocationChanged(e);
        foreach (var frm in this.OwnedForms) {
            frm.Location = new Point(frm.Location.X + this.Left - lastPos.X,frm.Location.Y + this.Top - lastPos.Y);
        }
        lastPos = this.Location;
    }

    protected override void WndProc(ref Message m) {
        // Move borderless window with click-and-drag on client window
        if (m.Msg == 0x84) m.Result = (IntPtr)2;
        else base.WndProc(ref m);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐