标签和;文本不会相应更新

时间:2014-06-30 08:48:27

标签: vb.net

我开发了一个类似于数字理解表活动的应用程序。

其工作顺序为:

  1. 用户双击文本框中的下划线文本区域
  2. 打开一个表单,要求他们回答
  3. 答案已经过验证,如果是,则返回原始格式
  4. 这里的问题是,由于某些奇怪的原因,我的标签不会在第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中更改文本框的标签和选定文本的文本,并且工作正常。

    可能导致此问题的任何想法? 感谢。

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(在其构造函数中提供),所以很容易更新后者,例如如果输入错误的答案,它会变成红色。