我目前正在开发一个项目,并决定使用带有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
我面临的另一个问题是,当我调用其他潜艇时,用户表单在子运行时变得无响应。 我研究并发现我可以实现多线程或异步任务,但我有点迷失,如果有人可以指导我或指出我正确的方向,我将非常感激。
提前致谢!!
答案 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,然后修改代码以仅切换一个图片框显示的图像。
以下是基本步骤:
在解决方案资源管理器中右键单击您的项目,然后按属性。
选择资源标签。
添加图片:
一个。将图像拖放到资源窗格上。
湾点击添加资源... 按钮旁边的箭头,然后按添加现有文件... 。
现在,在您的代码中,在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