VB.NET-检查标签中是否不存在键入的键的IF语句

VB.NET-检查标签中是否不存在键入的键的IF语句,vb.net,if-statement,Vb.net,If Statement,正如问题所说,我想做一个IF语句来检查我所创建的六个标签中是否有按下的键。在这六个标签中,随机产生一个字母,并将其放入每个标签中 我有这行代码,但它并没有像预期的那样工作,因为正确的按键仍然会执行下面的代码 If (e.KeyChar <> lblletter1.Text And e.KeyChar <> lblletter2.Text And e.KeyChar <> lblletter3.Text And e.KeyChar <> lbllet

正如问题所说,我想做一个IF语句来检查我所创建的六个标签中是否有按下的键。在这六个标签中,随机产生一个字母,并将其放入每个标签中

我有这行代码,但它并没有像预期的那样工作,因为正确的按键仍然会执行下面的代码

If (e.KeyChar <> lblletter1.Text And e.KeyChar <> lblletter2.Text And e.KeyChar <> lblletter3.Text And e.KeyChar <> lblletter4.Text And e.KeyChar <> lblletter5.Text And e.KeyChar <> lblletter6.Text) Then
            score -= 1
            lblscore.Text = score
            incorrect += 1
        End If
出于某种原因,在我禁用该行之后,它会按预期工作,我对我拥有的六个标签中的每一个都重复了这一点

lblletter2.Text = Convert.ToChar(num).ToString
希望不要太混乱

 Private Sub typingtutor_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
    'CHECKS IF THE KEY PRESSED IS THE SAME AS THE LETTER IN THE LABELS, IF IT IS THEN THE LABEL MAKES A NEW LETTER AND ADDS 1 TO THE SCORE
    'PROBLEM WITH CODE - IF THERE ARE TWO LABELS WITH SAME LETTER I CANNOT FIND A WAY TO CHECK TO MAKE ONE KEYPRESS CHANGE BOTH LABELS WITHOUT AFFECTING THE SCORING (TRIED SEPARATE IF STATEMENTS BUT THEN THAT MEANS THE ELSE STATEMENT CANNOT BE USED, THE CODE "e.keychar <> lblletter.text" DOESN:T WORK)

    If line1.Visible = True Then ' Disables key presses from working until the start button is pressed
        'nested if statements that work only when the above condition is met (line becomes visible when start button is pressed)
        If (e.KeyChar = lblletter1.Text) Then ' check if the pressed key (e.keychar) is the same as the letter in the label
            score += 1
            lblscore.Text = score
            lblletter1.Top = 35
            'lblletter1.Text = Convert.ToChar(num).ToString 'uses the randomly produced number that was declared globally and converts it to a letter (ascii) - sourced from MSDN
            num = random.Next(97, 122) 'chooses a random number between 97 and 122 which represents the letters of alphabet, for next letter
            speed += 1 ' keeps track of how many key presses there are have been
        End If
        If (e.KeyChar = lblletter2.Text) Then
            'MsgBox("works")
            score += 1
            lblscore.Text = score
            lblletter2.Top = 35
            'lblletter2.Text = Convert.ToChar(num).ToString
            num = random.Next(97, 122)
            speed += 1
        End If

        If (e.KeyChar = lblletter3.Text) Then
            score += 1
            lblscore.Text = score
            lblletter3.Top = 35
            'lblletter3.Text = Convert.ToChar(num).ToString
            num = random.Next(97, 122)
            speed += 1
        End If
        If (e.KeyChar = lblletter4.Text) Then
            score += 1
            lblscore.Text = score
            lblletter4.Top = 35
            'lblletter4.Text = Convert.ToChar(num).ToString
            num = random.Next(97, 122)
            speed += 1
        End If
        If (e.KeyChar = lblletter5.Text) Then
            score += 1
            lblscore.Text = score
            lblletter5.Top = 35
            'lblletter5.Text = Convert.ToChar(num).ToString
            num = random.Next(97, 122)
            speed += 1
        End If
        If (e.KeyChar = lblletter6.Text) Then
            score += 1
            lblscore.Text = score
            lblletter6.Top = 35
            'lblletter6.Text = Convert.ToChar(num).ToString
            num = random.Next(97, 122)
            speed += 1
        End If
        'Else
        'If (e.KeyChar <> lblletter1.Text And e.KeyChar <> lblletter2.Text And e.KeyChar <> lblletter3.Text And e.KeyChar <> lblletter4.Text And e.KeyChar <> lblletter5.Text And e.KeyChar <> lblletter6.Text) Then
        If (e.KeyChar <> lblletter1.Text(0) And e.KeyChar <> lblletter2.Text(0) And e.KeyChar <> lblletter3.Text(0) And e.KeyChar <> lblletter4.Text(0) And e.KeyChar <> lblletter5.Text(0) And e.KeyChar <> lblletter6.Text(0)) Then
            'If (e.KeyChar <> lblletter1.Text(0) And e.KeyChar <> lblletter2.Text(0) And _
            'e.KeyChar <> lblletter3.Text(0) And e.KeyChar <> lblletter4.Text(0) And _
            'e.KeyChar <> lblletter5.Text(0) And e.KeyChar <> lblletter6.Text(0)) Then
            score -= 1
            lblscore.Text = score
            incorrect += 1 ' variable used to check for accuracy
            speed += 1
            Label2.Text = incorrect
        End If
    End If

    If score < 0 Then
        counter -= 1
    End If


End Sub
Private Sub-typingtutor_KeyPress(ByVal sender作为对象,ByVal e作为System.Windows.Forms.KeyPressEventArgs)处理Me.KeyPress
'检查按下的键是否与标签中的字母相同,如果相同,则标签将生成一个新字母并在分数上加1
'代码问题-如果有两个标签具有相同的字母,我无法找到检查的方法,以使一个按键在不影响评分的情况下更改两个标签(尝试使用单独的IF语句,但这意味着不能使用ELSE语句,代码“e.keychar lblletter.text”不起作用)
如果line1.Visible=True,则“禁用按键操作,直到按下开始按钮为止。”
'仅当满足上述条件时才起作用的嵌套if语句(当按下“开始”按钮时,该行变为可见)
如果(e.KeyChar=lblletter1.Text),则检查按下的键(e.KeyChar)是否与标签中的字母相同
分数+=1
lblscore.Text=分数
lblletter1.Top=35
“lblletter1.Text=Convert.ToChar(num).ToString”使用全局声明的随机生成的数字,并将其转换为源于MSDN的字母(ascii)
num=random.Next(97122)'为下一个字母选择一个介于97和122之间的随机数,代表字母表中的字母
速度+=1'记录有多少次按键
如果结束
如果(e.KeyChar=lblletter2.Text),则
“MsgBox(“工作”)
分数+=1
lblscore.Text=分数
lblletter2.Top=35
'lblletter2.Text=Convert.ToChar(num).ToString
num=random.Next(97122)
速度+=1
如果结束
如果(e.KeyChar=lblletter3.Text),则
分数+=1
lblscore.Text=分数
lblletter3.Top=35
'lblletter3.Text=Convert.ToChar(num).ToString
num=random.Next(97122)
速度+=1
如果结束
如果(e.KeyChar=lblletter4.Text),则
分数+=1
lblscore.Text=分数
lblletter4.Top=35
'lblletter4.Text=Convert.ToChar(num).ToString
num=random.Next(97122)
速度+=1
如果结束
如果(e.KeyChar=lblletter5.Text),则
分数+=1
lblscore.Text=分数
lblletter5.Top=35
'lblletter5.Text=Convert.ToChar(num).ToString
num=random.Next(97122)
速度+=1
如果结束
如果(e.KeyChar=lblletter6.Text),则
分数+=1
lblscore.Text=分数
lblletter6.Top=35
'lblletter6.Text=Convert.ToChar(num).ToString
num=random.Next(97122)
速度+=1
如果结束
”“否则呢
'如果(e.KeyChar lblletter1.Text和e.KeyChar lblletter2.Text和e.KeyChar lblletter3.Text和e.KeyChar lblletter4.Text和e.KeyChar lblletter5.Text和e.KeyChar lblletter6.Text),则
如果(e.KeyChar lblletter1.Text(0)和e.KeyChar lblletter2.Text(0)和e.KeyChar lblletter3.Text(0)和e.KeyChar lblletter4.Text(0)和e.KeyChar lblletter5.Text(0)和e.KeyChar lblletter6.Text(0)),则
'如果(e.KeyChar lblletter1.Text(0)和e.KeyChar lblletter2.Text(0)和_
'e.KeyChar lblletter3.Text(0)和e.KeyChar lblletter4.Text(0)和_
'e.KeyChar lblletter5.Text(0)和e.KeyChar lblletter6.Text(0)),然后
分数-=1
lblscore.Text=分数
用于检查准确性的+=1'变量不正确
速度+=1
Label2.Text=不正确
如果结束
如果结束
如果得分<0,则
计数器-=1
如果结束
端接头
[编辑] 此答案已更新,以响应问题中的更改

与为6个标签中的每一个复制代码相比,创建标签数组并在数组中循环更容易。为了使所有内容保持一致,我创建了array KeyPress事件。最好将数组设置为表单中的私有字段,并在表单的加载事件中对其进行初始化。代码使用一个名为
good
的布尔值来记住按下的键是否与任何标签匹配

Sub MainForm_KeyPress(sender As Object, e As KeyPressEventArgs)
    Dim labels() As Label = {lblletter1, lblletter2, lblletter3, lblletter4, lblletter5, lblletter6}
    If Not line1.Visible Then Exit Sub 
    speed += 1

    Dim good As Boolean 
    For Each lab As Label In labels
        If e.KeyChar = lab.Text(0) Then
            score += 1
            lblscore.Text = score.ToString 
            lab.Top = 35
            Dim num As Integer = random.Next(97, 123) 'choose >= "a" And < "{"
            lab.Text = Chr(num)
            good = True 
        End If
    Next

    If Not good Then
        score -= 1
        lblscore.Text = score.ToString 
        incorrect += 1
        Label2.Text = incorrect.ToString 
        If score < 0 Then counter -= 1
    End If
End Sub 
Sub-main表单_按键(发送方作为对象,e作为按键事件参数)
标签为{lblletter1,lblletter2,lblletter3,lblletter4,lblletter5,lblletter6}
如果不是line1.可见,则退出Sub
速度+=1
像布尔一样好
对于每个实验室,作为标签中的标签
如果e.KeyChar=lab.Text(0),则
分数+=1
lblscore.Text=score.ToString
实验室Top=35
Dim num As Integer=random。下一步(97123)“选择>=”a“和<”{”
实验室文本=Chr(num)
好=真
如果结束
下一个
如果不好的话
分数-=1
lblscore.Text=score.ToString
不正确+=1
Label2.Text=不正确的.ToString
如果分数<0,则计数器-=1
如果结束
端接头

你必须担心大写吗?试着用
来代替
。你所说的“如果有两个标签有相同的字母,我无法找到一种方法来检查,使一个按键同时更改两个标签而不影响评分”?当两个标签包含相同的字母时会发生什么
Sub MainForm_KeyPress(sender As Object, e As KeyPressEventArgs)
    Dim labels() As Label = {lblletter1, lblletter2, lblletter3, lblletter4, lblletter5, lblletter6}
    If Not line1.Visible Then Exit Sub 
    speed += 1

    Dim good As Boolean 
    For Each lab As Label In labels
        If e.KeyChar = lab.Text(0) Then
            score += 1
            lblscore.Text = score.ToString 
            lab.Top = 35
            Dim num As Integer = random.Next(97, 123) 'choose >= "a" And < "{"
            lab.Text = Chr(num)
            good = True 
        End If
    Next

    If Not good Then
        score -= 1
        lblscore.Text = score.ToString 
        incorrect += 1
        Label2.Text = incorrect.ToString 
        If score < 0 Then counter -= 1
    End If
End Sub