【发布时间】:2020-12-23 21:34:31
【问题描述】:
我刚开始使用 Visual Studio 的 Visual Basic 自定进度课程。我分配的一个问题是创建一个带有两个按钮的表单。当表单加载时,Button1 被启用,而 Button2 被禁用。当您单击 Button1 时,Button1 被禁用,而 Button2 被启用。当您然后单击 Button2 时,Button2 被禁用,而 Button1 被启用。
我很容易做到这一点,所以我决定给自己增加一个额外的挑战。挑战是我想让禁用的按钮显示文本“禁用”,启用的按钮显示“启用”,并带有下划线的“E”作为按钮的热键。我为包含字符串“&Enabled”的启用按钮设置了一个字符串变量,以启用“E”作为热键。 “E”用作热键,但不带下划线。
我已经在网上搜索了解决此问题的方法,但我没有找到答案。我还尝试调整按钮的大小以查看按钮是否太小而无法显示下划线。那没有用。我仔细检查了我的代码,但我真的不太了解这种语言,无法理解为什么“E”没有带下划线。我正在提交我的代码并寻求帮助。我想了解为什么这不能按我预期的方式工作。
这是我使用 Visual Studio 2019 为表单编写的 VB.Net 代码。
Public Class frmEnabledProblem
Dim blnButton1Enabled As Boolean = True
Dim blnButton2Enabled As Boolean = False
Dim strButton1Enabled As String = "&Enabled"
Dim strButton1Disabled As String = "Disabled"
Dim strButton2Enabled As String = "&Enabled"
Dim strButton2Disabled As String = "Disabled"
Private Sub frmEnabledProblem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.KeyPreview = True
btnButton2.Text = strButton2Disabled
btnButton2.Enabled = False
btnButton1.Text = strButton1Enabled
btnButton1.Enabled = True
End Sub
Private Sub btnButton1_Click(sender As Object, e As EventArgs) Handles btnButton1.Click
blnButton1Enabled = False
blnButton2Enabled = True
btnButton1.Enabled = blnButton1Enabled
btnButton2.Enabled = blnButton2Enabled
btnButton1.Text = strButton1Disabled
btnButton2.Text = strButton2Enabled
End Sub
Private Sub btnButton2_Click(sender As Object, e As EventArgs) Handles btnButton2.Click
blnButton1Enabled = True
blnButton2Enabled = False
btnButton1.Enabled = blnButton1Enabled
btnButton2.Enabled = blnButton2Enabled
btnButton1.Text = strButton1Enabled
btnButton2.Text = strButton2Disabled
End Sub
End Class
感谢您的帮助。
【问题讨论】:
-
这是一个 Windows 的东西,按键盘上的 ALT 键,它应该会如你所愿地显示
-
@JayV,谢谢!但是,为什么不按 ALT 键就不会显示呢?如果我使用属性查看器将热键放在按钮文本中,它将在程序运行时显示。那么,当我动态更改文本时,为什么不呢?
-
对于第一部分 - 微软做出了改变,我不知道为什么,可能是视觉美学。对于第二部分 - 这不是我看到的行为。在程序运行时,如果不按 ALT 键,我永远看不到下划线,无论它是如何设置的(这也包括使用上面的代码)
-
@JayV,感谢您的解释。当我不尝试更改文本并且在调试模式下运行时,热键的下划线会显示在我的计算机上。无论如何,您的cmets回答了我的问题。再次感谢您,非常感谢。
-
键盘提示在
DesignMode = true时启用in the Control class,否则ShowKeyboardCues返回false。您可以使用自定义控件并添加protected override bool ShowKeyboardCues => true;(在VB.Net 中转换为Protected Overrides ReadOnly Property ShowKeyboardCues As Boolean = True)。这会覆盖属性以始终返回True,因此 下划线 也会在运行时显示。在代码上的 cmets 中,也解释了那里发生了什么。