我开发了一个类似于数字理解表活动的应用程序。
其工作顺序为:
这里的问题是,由于某些奇怪的原因,我的标签不会在第3步更新,以及文本。我有一个名为lbAnswerStatus的标签,它会通知用户他们是否有正确的答案,文本没有更新,以及' SelectedText'在表格1上应该用答案代替(如果正确的话)
这是我的代码:
表单1(单击文本框时):
Form2.Answer(answers(counter))
答案(计数器)表示传递的正确答案,与表格2中的用户答案进行比较
表格2:
If tbAnswer.Text = theanswer Then
Form1.answerStatus(True, theanswer)
表格1:
Public Sub answerStatus(status, answer)
If status = true Then
Form2.Close()
rtb.SelectedText = answer
lbAnswerStatus.ForeColor = Color.Green
End If
End Sub
我的第一个假设是Rich文本框的SelectedText没有改变,因为它没有关注它,但lbAnswerStatus颜色也没有改变,所以我想对表单进行修改存在问题。
我使用了一个消息框来测试lbAnswerStatus.Text是否会弹出并且确实弹出,所以它可以读取但不能写入。
我还尝试在步骤1中更改文本框的标签和选定文本的文本,并且工作正常。
可能导致此问题的任何想法? 感谢。
答案 0 :(得分:3)
我想你希望你的Form2(AnswerForm)呈现为模态对话框。这样做,您可以返回结果。如果提供的答案不正确,您没有说出您希望在答案状态标签或答案表单上发生什么。
作为如何完成它的示例,创建一个新的Windows窗体项目。在Form1上,放置一个按钮(Button1)和一个标签(" lblAnswerStatus")。添加名为" AnswerForm"的新表单到项目,并添加一个TextBox(" TextBox1")和一个按钮(" bnDone")。
作为AnswerForm的代码:
Public Class AnswerForm
Private statusLabel As Label
Private answerText As String
Private Sub bnDone_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnDone.Click
If TextBox1.Text.Equals(answerText, StringComparison.CurrentCultureIgnoreCase) Then
' Alternative 1: set the color here if you want to
statusLabel.ForeColor = Color.Green
' return a value indicating success
Me.DialogResult = Windows.Forms.DialogResult.Yes
Me.Close()
Else
' indicate error
statusLabel.ForeColor = Color.Red
End If
End Sub
Public Sub New(ByVal statusLabel As Label, ByVal answerText As String)
InitializeComponent()
Me.statusLabel = statusLabel
Me.answerText = answerText
End Sub
End Class
并作为Form1的代码:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
lblAnswerStatus.ForeColor = Color.Blue
Using answerFrm As New AnswerForm(lblAnswerStatus, "X")
Dim dlgResult = answerFrm.ShowDialog()
' Alternative 2: use this if you want to change the color in this handler
If dlgResult = DialogResult.Yes Then
lblAnswerStatus.ForeColor = Color.Purple
End If
End Using
End Sub
End Class
如果单击Form1上的Button1,则会出现一个对话框。键入TextBox1并单击bnDone。因为AnswerForm的实例引用了lblAnswerStatus(在其构造函数中提供),所以很容易更新后者,例如如果输入错误的答案,它会变成红色。