我猜这更像是一个建议主题。 我一直在想如何创建一个按钮,当它没有被按下时显示“播放”。然后在按下后显示“暂停”。反之亦然,反之亦然。
我在尝试创建扩展面板按钮时遇到了类似的问题,但这很简单,因为如果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:
答案 0 :(得分:7)
如何只使用一个这样的变量和代码:
If isPlay Then
btnPlay.Image = Image.FromFile("iconPause.png")
else
btnPlay.Image = Image.FromFile("iconPlay.png")
End If
isPlay = not isPlay
答案 1 :(得分:2)
您可以使用“标记”属性。它的类型是“对象”,因此您可以使用任何您想要的对象,但在您的情况下,字符串将执行:
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
答案 2 :(得分:1)
大多数.NET WinForm控件都有一个“Tag”属性(一个按钮有一个)。您可以将标记设置为您想要的任何内容。一种简单的方法是将“Tag”属性设置为具有按钮状态的布尔值。
只是一个想法......确定还有很多其他方法。
<强>更新强> 否则,您可以将应用程序中按钮的状态保持为自己的成员变量。这可能有几个优点,因为您可以将此状态传递给可能需要它的其他控件。这种方法唯一的缺点是必须单独维护国家。
如果您有一个相当简单的实现,请使用Tag属性。
答案 3 :(得分:1)
相反的意见......
...虽然其他答案为您提供了一些技巧来实现您想要的结果,但我会要求您重新考虑您的UI设计。
双状态按钮 - 单击时可以替代的按钮 - 可能是用户受挫的原因。
以下是两种情况。
场景#1 ...如果用户计算机处于负载状态(由于任何原因),用户实际点击按钮与执行点击处理程序之间可能存在明显的延迟。
通常,click和handler之间的时间是几毫秒或更短,但它可以运行几秒钟。如果在用户点击双状态按钮时发生这种情况,他们可能会再次单击该按钮。当应用程序赶上时,净效果是打开,然后立即关闭。
场景#2 ...许多用户习惯性地双击所有内容。即使是多年来一直使用电脑的有经验的用户也可能有这种奇怪的习惯。当他们试图按下双状态按钮时,猜猜会发生什么......操作会切换,然后立即关闭。
至少有两种解决方案......
解决方案#1 ...使用两个按钮,一个用于“开”,一个用于“关闭”。
解决方案#2 ...如果在第一次点击后立即处理(即:&lt; 75ms),则写一些去抖动代码以抑制第二次点击的效果。
答案 4 :(得分:0)
我个人不使用Visual Basic,但我知道Windows窗体中的按钮有一个名为“Tag”的属性。它是通用对象类型,因此您可以保存所需的任何状态,只需使用强制转换即可将值恢复。
答案 5 :(得分:0)
如何使用“Image”属性?
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