提高Windows窗体应用程序的UI响应能力

时间:2018-05-16 13:12:22

标签: vb.net visual-studio user-interface response userform

我目前正在开发一个项目,并决定使用带有Windows窗体应用程序的Visual Studio(Visual Basic)为它创建一个用户界面。

我面临的问题是用户界面没有像我喜欢的那样快速,顺畅地响应。 主要是,我使用图片作为按钮,使用户形式看起来更现代。 但是,当我将鼠标悬停在"按钮上时#34;它需要一段时间才能突出显示按钮"出现。

P1是"正常按钮"的图片。和P2是"突出显示的按钮"。

的图片

以下是我现在的简短代码:

Public Class Main

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


End Sub

Private Sub PictureBox1_MouseHover(sender As Object, e As EventArgs) Handles P1.MouseHover
    P1.Visible = False
    P2.Visible = True
End Sub

Private Sub P2_MouseClick(sender As Object, e As MouseEventArgs) Handles P2.MouseClick
    'Call cmdInit()
    'Call cmdConnectRobot()
    'Call cmdUnlock()
End Sub

Private Sub Main_MouseHover(sender As Object, e As EventArgs) Handles Me.MouseHover
    If P2.Visible = True Then
        P2.Visible = False
        P1.Visible = True
    End If
End Sub

Private Sub P4_Click(sender As Object, e As EventArgs) Handles P4.Click

End Sub
End Class

我面临的另一个问题是,当我调用其他潜艇时,用户表单在子运行时变得无响应。 我研究并发现我可以实现多线程或异步任务,但我有点迷失,如果有人可以指导我或指出我正确的方向,我将非常感激。

提前致谢!!

2 个答案:

答案 0 :(得分:1)

我首先要说的是我不是一个交易程序员,我相信有人会指出更好的方法来做这些事情,但就线程问题来说,实现起来相当简单。

Imports System.Threading
Public Class Form1
Dim WorkerThread As New Thread(AddressOf DoWork)

'WorkerThread'可以是您喜欢的任何名称,'DoWork'是您想要在新线程中运行的子名称,并通过调用启动:

WorkerThread.start()

然而有一个问题,新线程无法直接与GUI交互,因此您无法更改文本框文本等...我发现对GUI进行更改的最简单方法是将计时器拖到你的表单,并有新的线程更改变量(在公共类Form1下面预定义),然后使用Timer1 Tick事件监视变量并更新GUI,如果有任何更改。

答案 1 :(得分:1)

在这种情况下,您的UI是响应式的,但只有在鼠标光标悬停在控件上一段时间(默认值为400毫秒)后才会引发MouseHover event,这就是导致延迟的原因

你要找的是MouseEnter event,它会在光标进入(“触摸”)控件后立即引发:

Private Sub P1_MouseEnter(sender As Object, e As EventArgs) Handles P1.MouseEnter
    P1.Visible = False
    P2.Visible = True
End Sub

然后,您可以将其与第二个图片框中的MouseLeave event一起使用,切换回非突出显示的图片:

Private Sub P2_MouseLeave(sender As Object, e As EventArgs) Handles P2.MouseLeave
    P1.Visible = True
    P2.Visible = False
End Sub

然而,像这样切换图片框并不是最佳选择。我建议您研究如何使用Application Resources,然后修改代码以仅切换一个图片框显示的图像。

以下是基本步骤:

  1. 解决方案资源管理器中右键单击您的项目,然后按属性

  2. 选择资源标签。

  3. 添加图片:

    一个。将图像拖放到资源窗格上。

    湾点击添加资源... 按钮旁边的箭头,然后按添加现有文件...

  4. 现在,在您的代码中,在Public Class Form1

    下方添加此内容
    Dim ButtonNormal As Image = My.Resources.<first image name>
    Dim ButtonHighlighted As Image = My.Resources.<second image name>
    

    <first image name><second image name>替换为按钮图片的名称。

    现在,您只需要一个按钮的图片框:

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        P1.Image = ButtonNormal
    End Sub
    
    Private Sub P1_MouseEnter(sender As System.Object, e As System.EventArgs) Handles P1.MouseEnter
        P1.Image = ButtonHighlighted
    End Sub
    
    Private Sub P1_MouseLeave(sender As System.Object, e As System.EventArgs) Handles P1.MouseLeave
        P1.Image = ButtonNormal
    End Sub