禁用时更改按钮文本
Change button text while disabled
我正在尝试更改按钮禁用时的文本。我有一个在按下按钮时调用的后台工作程序,我试图让按钮禁用 5 秒,按钮上的文本指示再次启用按钮之前的剩余时间。
以下是我的代码,删除了不相关的位:
Private Sub btnDispense_Click(sender As System.Object, e As System.EventArgs) Handles btnDispense.Click
btnDispense.Enabled = False
BackgroundWorker1.RunWorkerAsync()
' Lots of my irrelevant code in here.
Private Sub bgwWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
' Changes button text from 5 to 1, with threading to keep time.
btnDispense.Text = "Dispense (-1) [5]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [4]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [3]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [2]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [1]"
Threading.Thread.Sleep(1000)
End Sub
Private Sub bgwWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
' Called when the BackgroundWorker is completed.
btnDispense.Enabled = True
End Sub
当我尝试 运行 时,没有错误,所以我的语法没问题。我唯一的问题是按钮上的文字没有改变;这是因为按钮被禁用了吗?我不知道我将如何着手完成这项工作。
如有任何帮助,我们将不胜感激!
要使用您的示例:
Private Sub btnDispense_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDispense.Click
bgwWorker.WorkerReportsProgress = True
btnDispense.Enabled = False
bgwWorker.RunWorkerAsync()
End Sub
Private Sub bgwWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwWorker.DoWork
Dim worker As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker)
worker.ReportProgress(0, "Dispense (-1) [5]")
Threading.Thread.Sleep(1000)
worker.ReportProgress(0, "Dispense (-1) [4]")
Threading.Thread.Sleep(1000)
worker.ReportProgress(0, "Dispense (-1) [3]")
Threading.Thread.Sleep(1000)
worker.ReportProgress(0, "Dispense (-1) [2]")
Threading.Thread.Sleep(1000)
worker.ReportProgress(0, "Dispense (-1) [1]")
Threading.Thread.Sleep(1000)
End Sub
Private Sub bgwWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgwWorker.ProgressChanged
btnDispense.Text = e.UserState.ToString
End Sub
Private Sub bgwWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwWorker.RunWorkerCompleted
btnDispense.Enabled = True
End Sub
我正在尝试更改按钮禁用时的文本。我有一个在按下按钮时调用的后台工作程序,我试图让按钮禁用 5 秒,按钮上的文本指示再次启用按钮之前的剩余时间。
以下是我的代码,删除了不相关的位:
Private Sub btnDispense_Click(sender As System.Object, e As System.EventArgs) Handles btnDispense.Click
btnDispense.Enabled = False
BackgroundWorker1.RunWorkerAsync()
' Lots of my irrelevant code in here.
Private Sub bgwWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
' Changes button text from 5 to 1, with threading to keep time.
btnDispense.Text = "Dispense (-1) [5]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [4]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [3]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [2]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [1]"
Threading.Thread.Sleep(1000)
End Sub
Private Sub bgwWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
' Called when the BackgroundWorker is completed.
btnDispense.Enabled = True
End Sub
当我尝试 运行 时,没有错误,所以我的语法没问题。我唯一的问题是按钮上的文字没有改变;这是因为按钮被禁用了吗?我不知道我将如何着手完成这项工作。
如有任何帮助,我们将不胜感激!
要使用您的示例:
Private Sub btnDispense_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDispense.Click
bgwWorker.WorkerReportsProgress = True
btnDispense.Enabled = False
bgwWorker.RunWorkerAsync()
End Sub
Private Sub bgwWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwWorker.DoWork
Dim worker As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker)
worker.ReportProgress(0, "Dispense (-1) [5]")
Threading.Thread.Sleep(1000)
worker.ReportProgress(0, "Dispense (-1) [4]")
Threading.Thread.Sleep(1000)
worker.ReportProgress(0, "Dispense (-1) [3]")
Threading.Thread.Sleep(1000)
worker.ReportProgress(0, "Dispense (-1) [2]")
Threading.Thread.Sleep(1000)
worker.ReportProgress(0, "Dispense (-1) [1]")
Threading.Thread.Sleep(1000)
End Sub
Private Sub bgwWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgwWorker.ProgressChanged
btnDispense.Text = e.UserState.ToString
End Sub
Private Sub bgwWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwWorker.RunWorkerCompleted
btnDispense.Enabled = True
End Sub