Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 结合播放和暂停按钮的最佳方式?_Vb.net_Variables_Button - Fatal编程技术网

Vb.net 结合播放和暂停按钮的最佳方式?

Vb.net 结合播放和暂停按钮的最佳方式?,vb.net,variables,button,Vb.net,Variables,Button,我想这更像是一条建议线索。 我一直在想,如果没有按下按钮,怎么能创建一个显示“播放”的按钮。按下后会显示“暂停”。当再次按下时,visa卡也会这样 我在尝试创建展开面板按钮时遇到了类似的问题,但这很容易,因为如果PanelCollapsed为true,我可以将变量设置为true或false 但在这种情况下,我无法在按钮中找到任何可以查询的属性。 所以我想到了这个,但我忍不住想,这是一个相当不明智的做法 If isPlay = True Then If isPaused =

我想这更像是一条建议线索。 我一直在想,如果没有按下按钮,怎么能创建一个显示“播放”的按钮。按下后会显示“暂停”。当再次按下时,visa卡也会这样

我在尝试创建展开面板按钮时遇到了类似的问题,但这很容易,因为如果PanelCollapsed为true,我可以将变量设置为true或false

但在这种情况下,我无法在按钮中找到任何可以查询的属性。 所以我想到了这个,但我忍不住想,这是一个相当不明智的做法

    If isPlay = True Then
        If isPaused = False Then
            btnPlay.Image = Image.FromFile("iconPause.png")
            isPaused = True
            isPlay = False
        End If
        GoTo Endline
    End If

    If isPlay = False Then
        If isPaused = True Then

            btnPlay.Image = Image.FromFile("iconPlay.png")
            isPaused = False
            isPlay = True
        End If
    End If

Endline:

大多数.NET WinForm控件都有一个“Tag”属性(按钮有一个)。您可以将标记设置为您想要的任何内容。一种简单的方法是将“Tag”属性设置为带有按钮状态的布尔值

只是一个想法…当然还有很多其他的方法

更新: 否则,您可以将应用程序中按钮的状态作为其自己的成员变量进行维护。这可能有几个优点,因为您可以将此状态传递给可能需要它的其他控件。这种方法的唯一缺点是必须单独维护状态


如果您有一个相当直接的实现,请使用Tag属性。

我个人不使用Visual Basic,但我知道Windows窗体中的按钮有一个名为“Tag”的属性。它属于泛型对象类型,因此您可以保存所需的任何状态,只需使用强制转换即可将值恢复。

仅使用一个变量和如下代码如何:

If isPlay Then
    btnPlay.Image = Image.FromFile("iconPause.png")
else
    btnPlay.Image = Image.FromFile("iconPlay.png")
End If

isPlay = not isPlay
您可以使用“标记”属性。其类型为“object”,因此您可以使用任何想要的对象,但在您的情况下,字符串可以:

    If Button1.Tag = "Pause" Then
        Button1.Image = Image.FromFile("iconPlay.png")
        Button1.Tag = "Play"
    Else
        Button1.Image = Image.FromFile("iconPause.png")
        Button1.Tag = "Pause"
    End If
使用“图像”属性如何

Rem form initialization
ImagePlay = Image.FromFile("iconPlay.png")
ImagePause = Image.FromFile("iconPause.png")
Button1.Image = ImagePlay
.
.
.
Rem on button1 click
If Button1.Image = ImagePlay Then
  Button1.Image = ImagePause
Else
  Button1.Image = ImagePlay
End If
相反的意见

。。。虽然其他答案为您提供了一些实现所需结果的技术,但我将要求您重新考虑您的UI设计

双状态按钮——单击时可用于其他用途的按钮——可以成为用户的一个来源

这里有两种情况

情景#1。。。如果用户计算机处于加载状态(出于任何原因),则在用户实际单击按钮和执行单击处理程序之间可能存在明显的延迟

通常,单击和处理程序之间的时间为几毫秒或更短,但它可以运行到几秒钟。如果在用户单击双状态按钮时发生这种情况,他们很可能会再次单击该按钮。当应用程序赶上时,其净效果是打开,然后立即再次关闭

场景2。。。许多用户习惯于双击所有内容。即使是使用电脑多年的有经验的用户也可能有这种奇怪的习惯。当他们试图按下双状态按钮时,猜猜会发生什么。。。该操作将打开,然后立即再次关闭

至少有两种解决方案

解决方案#1。。。使用两个按钮,一个用于“开”,一个用于“关”


解决方案#2。。。如果在第一次点击后立即处理(即:<75毫秒),请编写一些去抖动代码以抑制第二次点击的效果。

Ha,即将给出类似的答案:D+1为什么要同时维护
isPlay
isPause
?在我看来,它们是相反的。标记不是强类型的。成员字段是一个更好的方法。很好。但我的应用程序非常简单,只供我和几个朋友使用。我见过一些人说,双状态按钮是一个薄弱的设计实现。但我认为它在用户界面上看起来要好得多,而且大多数媒体播放器也有。只要试过这个,效果就会好得多!:)代码也短得多:)