Visual Basic 辅助窗体滑过主窗体,滑出主窗体,不关闭

问题描述 投票:0回答:1

我一直在为一些不同的事情创建一个 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

The Main UserForm, Contact Form when

更新:

我已经根据用户“Jimi”使用 AnimateWindows 的一些建议更新了代码。下面是我能够组合起来并开始工作的一些代码,我已经手动选择了联系表单的起始位置,所以现在当我单击打开联系表单时,它确实从右到左滑到屏幕上,它不是不是很干净,但现在就可以了,但是当我单击 X 按钮时,它不会从左到右,它只是关闭。 下面是代码:

导入 System.Runtime.InteropServices

公开课联系方式 私有共享函数 AnimateWindow(ByVal hWnd As IntPtr, ByVal time As Integer, ByVal flags As Integer) As Boolean 结束功能

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

vb.net winforms userform
1个回答
0
投票

我整个下午/晚上都在研究这个程序,试图找到一个解决方案。幸运的是我能够弄清楚。在下面的代码中,当加载联系表单时,属性被设置为它们的颜色,以及表单的位置/大小以及它相对于主表单(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

下课

© www.soinside.com 2019 - 2024. All rights reserved.