c# – 同时移动2个表单
发布时间:2020-12-15 17:21:52 所属栏目:百科 来源:网络整理
导读:我在这里停留了一下.我试图在不使用OnMove,LocationChanged,Docking等的情况下同时移动2个表单. 与其位置进行交互的唯一方法是覆盖WndProc.可能有用的东西是表单A是表单B的所有者.因此,每当A移动时,我也想移动B.不是相同的位置,但相同的距离. protected over
我在这里停留了一下.我试图在不使用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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |