如何让一个窗体移动的时候另一个也跟着动

xidiancjw 2009-11-11 01:26:49
有两个窗体form1和form2,要求移动form1时,form2也跟着一起动,也就是说它们的相对位置不变。烦请高人指点一二。
...全文
256 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2009-11-13
  • 打赏
  • 举报
回复
楼主的这个问题还没解决?
9F 给的链接,下载来看没有?

用 Timer控件 是比较简单,但效果肯定不好:
1. 在不停地设置窗体位置(即使没移动)。
2. 主窗口快速移动时,‘吸附窗口’肯定会是“跳跃”的(我没试,估计会这样,无论你把 .Interval 设得多小)。


效果最佳的解决方法是 HOOK 窗口消息处理 WinMsgProc() 。
自己想一下吧。
神马都能聊 2009-11-11
  • 打赏
  • 举报
回复
1、窗体跟随。看这个链接http://www.mndsoft.com/blog//article.asp?id=215或者自己搜索 VB 磁性窗体。

2、窗体保持最前。可以使用SetWindowPos,网上搜索VB SetWindowPos
贝隆 2009-11-11
  • 打赏
  • 举报
回复
最简单的方法就是在窗体中添加一个定时器,大致如下:
Option Explicit

Private Sub Command1_Click()
Form2.Show
End Sub

Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
On Error GoTo errSub
Form2.Left = Form1.Left + 1000
Form2.Top = Form1.Top + 1000
Exit Sub
errSub:

End Sub
xidiancjw 2009-11-11
  • 打赏
  • 举报
回复
是去掉了标题栏的窗口,好像不能移动的吧。因为窗口小,我需要它不被大的窗口覆盖,用最简单的方法怎样让它总在最前
嗷嗷叫的老马 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhuhuofong 的回复:]
VB6 没有单独的窗体移动事件。用API可以实现。另外可以用变通的办法。用timer控件检测窗体移动。
在窗体放入 from1 和 from2  timer控件。timer控件的Interval属性值设小一点。
VB codeDim WinXAsLong, WinYAsLongPrivateSub Form_Load()
Timer1.Interval=100
Timer1.Enabled=True
Form2.ShowEnd SubPrivateSub Timer1_Timer()If WinX<> Me.LeftOr WinY<> Me.TopThen
WinX= Me.Left: WinY= Me.Top
WindowMoveEndIfEnd SubSub WindowMove()
Me.Cls
Me.CurrentX=0
Me.CurrentY=0
Me.Print"Left:"& WinX&" Top:"& WinY
Form2.Height= Me.Height
Form2.Left= Me.Width+ Me.Left
Form2.Top= WinYEnd Sub
[/Quote]
支持这个,简单有效.
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xidiancjw 的回复:]
忘了,补充:form2必须在form1的特定区域内,
[/Quote]
用mdiform 试试
zhuhuofong 2009-11-11
  • 打赏
  • 举报
回复 1
VB6 没有单独的窗体移动事件。用API可以实现。另外可以用变通的办法。用timer控件检测窗体移动。
在窗体放入 from1 和 from2 timer控件。timer控件的Interval属性值设小一点。
Dim WinX As Long, WinY As Long
Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = True
Form2.Show
End Sub

Private Sub Timer1_Timer()
If WinX <> Me.Left Or WinY <> Me.Top Then
WinX = Me.Left: WinY = Me.Top
WindowMove
End If
End Sub
Sub WindowMove()
Me.Cls
Me.CurrentX = 0
Me.CurrentY = 0
Me.Print "Left:" & WinX & " Top:" & WinY
Form2.Height = Me.Height
Form2.Left = Me.Width + Me.Left
Form2.Top = WinY
End Sub
xidiancjw 2009-11-11
  • 打赏
  • 举报
回复
忘了,补充:form2必须在form1的特定区域内,
  • 打赏
  • 举报
回复
加个if windowstate 《》 1 还是0, 忘了
  • 打赏
  • 举报
回复
form1_resize()
form2.move

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧