我一直在为一些不同的事情创建一个 Visual Basic Win 应用程序。 我想添加的东西是在后台有主表单,当单击侧面按钮时,如下所示“联系人”,“联系人”表单从屏幕右侧向左滑入。一旦完全启动,它就会停止并可以与之交互。这一切都有效。 我的问题是,当按下“X”按钮(代表关闭)时,我希望表单滑出屏幕然后关闭而不是保持打开状态。
我已经能够让表单从屏幕上滑落。我还能够关闭表格。但是,我无法让它滑出屏幕然后关闭。 下面是表单的一些图像,以及我的 frmContact 表单上的“X”按钮的代码。 我在动画中使用了计时器刻度。 我已经看到其他人使用 psTimerFunc 和 piCount 的“DOWN”函数制作了类似的东西,但是当我改变它以尝试使其适合我的应用程序时,它不起作用。 (我还想提一下,我在 Visual Basic 方面并没有做太多事情,这是我在玩/测试我能做的事情,任何帮助或提示都值得赞赏)
这里是加载表单的代码,当单击“X”按钮时,将表单带到屏幕上“tmrContact_Tick”,然后将表单从屏幕上移开(不起作用)“tmrContact2”:
Sub LoadForm(MessageDescription As String)
Me.Top = 0
Me.Left = Screen.PrimaryScreen.Bounds.Width
Me.TopMost = True
Me.BringToFront()
Me.Show()
tmrContact.Enabled = True
End Sub
Private Sub btnX_Click(sender As Object, e As EventArgs) Handles btnX.Click
tmrContact2.Enabled = True
End Sub
Private Sub tmrContact_Tick(sender As Object, e As EventArgs) Handles tmrContact.Tick
Me.Left = Me.Left - 5
If Me.Left + Me.Width <= Screen.PrimaryScreen.Bounds.Width + 10 Then
tmrContact.Enabled = False
End If
End Sub
Private Sub tmrContact2_Tick(sender As Object, e As EventArgs) Handles tmrContact2.Tick
Do While Me.Left + Me.Width >= Screen.PrimaryScreen.Bounds.Width - 10
Me.Left = Me.Left + 1
Application.DoEvents() ' Allow the application to process other events
Loop
tmrContact2.Enabled = False
Me.Close()
End Sub
更新:
我已经根据用户“Jimi”使用 AnimateWindows 的一些建议更新了代码。下面是我能够组合起来并开始工作的一些代码,我已经手动选择了联系表单的起始位置,所以现在当我单击打开联系表单时,它确实从右到左滑到屏幕上,它不是不是很干净,但现在就可以了,但是当我单击 X 按钮时,它不会从左到右,它只是关闭。 下面是代码:
导入 System.Runtime.InteropServices
公开课联系方式
Private Sub frmContact_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AnimateWindow(Me.Handle, 100, &H2)
End Sub
Private Sub btnX_Click(sender As Object, e As EventArgs) Handles btnX.Click
AnimateWindow(Me.Handle, 100, &H1)
End Sub
下课
以下是一个未列出的 YT 视频链接,显示了实际问题: https://youtu.be/ocePY2Dl_SY
我整个下午/晚上都在研究这个程序,试图找到一个解决方案。幸运的是我能够弄清楚。在下面的代码中,当加载联系表单时,属性被设置为它们的颜色,以及表单的位置/大小以及它相对于主表单(frmDDEF)的位置,表单被带到前面并以动画方式显示滑动。单击“X”后,表单就会滑出屏幕,一旦滑出,它就会被发送到后面并关闭。这使得如果主窗体没有最大化,没有 Me.SendToBack() 你将能够看到窗体仍然滑动,然后在它离开屏幕后关闭,这行代码可以防止这种情况发生。
公开课联系方式
Public Sub LoadForm(MessageDescription As String)
grpCONTACTTOP.BackColor = Color.FromArgb(2, 7, 26)
pnlContact.BackColor = Color.FromArgb(39, 47, 76)
Me.Top = frmDDEF.Top
Me.Left = frmDDEF.Left + frmDDEF.Width ' Appears from the right side of the form
Me.Height = frmDDEF.Height ' Matches the height of Contact with DDEF
Me.TopMost = True
Me.BringToFront()
Me.Show()
tmrContact.Enabled = True
End Sub
Private Sub lblX_Click(sender As Object, e As EventArgs) Handles lblX.Click
tmrContact2.Enabled = True
End Sub
Private Sub tmrContact_Tick(sender As Object, e As EventArgs) Handles tmrContact.Tick ' Move left
Me.Left = Me.Left - 5
If Me.Left + Me.Width <= frmDDEF.Left + frmDDEF.Width + 10 Then
tmrContact.Enabled = False
End If
End Sub
Private Sub tmrContact2_Tick(sender As Object, e As EventArgs) Handles tmrContact2.Tick ' Move right
Me.Left = Me.Left + 5
If Me.Left >= frmDDEF.Left + frmDDEF.Width Then
Me.SendToBack()
tmrContact2.Enabled = False
Me.Close()
End If
End Sub
下课