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

kjthegm6  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(63)

我一直在为一些不同的事情创建一个Visual Basic Win应用程序。我想添加的东西是在后台有主窗体,当点击一个侧边按钮时,如下面所示“联系人”,“联系人”窗体从屏幕右侧滑入,向左走。一旦完全打开,它就停止了,可以与之交互。这一切都很好。我的问题是,当“X”按钮(表示关闭),我希望窗体滑出屏幕,然后关闭,而不是保持打开状态。
我已经能够让表单滑出屏幕.我也已经能够让表单关闭.然而,我还没有能够让它滑出屏幕,然后关闭.下面是表单的一些图像,我的X代码我的frmContact表单上的按钮。我使用了一个计时器滴答的动画。我已经看到别人做了这样的东西使用“向下”函数与psTimerFunc和piCount,然而,当我改变这一点,试图使它适合我的应用程序,它不工作.(* 我也只想提我没有做太多的方式Visual Basic,这是我玩/测试的东西,我可以做,任何帮助或提示是赞赏 *)
下面是加载表单的代码,当单击“X”按钮时,将表单带到屏幕上“tmrContact_Tick”,然后将表单从屏幕上取下(不工作)“tmrContact 2”:

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 UserFormContact Form when "Contact" is clicked

更新:

我已经更新了代码内联从用户的一些建议“Jimi”使用AnimateWindows.下面是一些代码,我能够放在一起,并得到工作,我手动选择了联系表单的起始位置,所以现在当我点击打开联系表单,它确实滑到屏幕上从右到左,它不是很干净,但它会做现在,然而,当我点击X按钮,它不会从左到右,它只是关闭。下面是代码:
进口系统..InteropServices
公共类frmContact <DllImport(“user32.dll”)>私有共享函数AnimateWindow(ByVal hWnd As IntPtr,ByVal time As Int,ByVal flags As Int)As Boolean End Function

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


End Class
下面是一个未列出的YT视频链接,显示了问题的实际情况:https://youtu.be/ocePY2Dl_SY

chhqkbe1

chhqkbe11#

我一直在工作的程序整个下午/晚上试图拿出一个解决方案。幸运的是,我能够弄清楚它。在下面的代码中,当联系人窗体加载,属性设置与他们的颜色,以及位置/大小的形式,它应该在主窗体(frmDDEF);此外,表单将被带到前面,并在动画中以滑动方式显示。
单击“X”后,窗体将滑出屏幕;关闭后,它将被发送到后台并关闭。这样,如果主窗体没有最大化,没有Me.SendToBack(),您将能够看到窗体仍在滑动,然后在离开屏幕后关闭;这行代码可以防止这种情况。

Public Class frmContact

    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
End Class

字符串

相关问题