Для L oop в Visual Studio 2019 (Visual Basi c) Не делать то, что я ожидаю, что он делает - PullRequest
0 голосов
/ 10 апреля 2020

Я не лучший в циклах for, но, насколько я понимаю, l oop должен продолжать работать столько же символов в "StupidString". В приведенном ниже коде, я думаю, что он должен работать и как он работает, совершенно иначе. На мой взгляд, оператор If («A») должен выполняться 3 раза. Он работает так, что оператор If («A») выполняется только один раз. TextBox1.Text показывает 5. Если кто-то может показать мне, что мне не хватает, я был бы признателен. Я уверен, что это что-то глупое. Спасибо

    Dim len As Integer
    Dim i As Integer
    Dim key As String
    Dim StupidString As String = "ACCAA"


    len = Microsoft.VisualBasic.Len(StupidString)

    For i = 1 To len
        key = Microsoft.VisualBasic.Mid(StupidString, i, 1)
        TextBox1.Text = key

        If key = "A" Then
            My.Computer.Audio.Play("Local audio file")
        ElseIf key = "B" Then
            My.Computer.Audio.Play("Local audio file")
        End If

    Next

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

My.Computer.Audio.Play начинает воспроизводить звук в фоновом режиме и не дожидается его окончания sh. Если звук уже воспроизводится, он останавливает его и запускает новый.

Поскольку ваш For l oop работает очень быстро, он запускает звук A три раза почти одновременно. В результате net вы слышите его воспроизведение один раз (в последний раз по расписанию).

Если вы хотите воспроизвести звук три раза, укажите второй параметр :

My.Computer.Audio.Play("Local audio file", AudioPlayMode.WaitToComplete)
0 голосов
/ 10 апреля 2020

Добро пожаловать на форумы, @ lriehlou812!

Я позволил себе немного почистить вещи - это поможет вам перейти на новый уровень. : -)

Самая важная вещь, которую можно извлечь из вашего кода, такова: ПОЧТИ все в VB - это основание 0 (это означает, что первая позиция строки - это позиция "0". Mid(), однако, это база 1. (см. Дополнительную информацию здесь) . Я не полностью проанализировал ваш код, чтобы доказать это, но это должно помочь вам разобраться в вашей проблеме.

Кроме того, я не тестировал "мой код, но он должен работать.

Удачного кодирования. Надеюсь, это поможет.

Sub TestLoop()
    Dim StupidString As String = "ACCAA"
    For i = 0 To StupidString.Length - 1
        Select Case StupidString(i)
            Case "A"
                My.Computer.Audio.Play("Local audio file")
            Case "B"
                My.Computer.Audio.Play("Local audio file")
            Case "C"
                'do nothing?
        End Select
        TextBox1.Text = StupidString(i)
    Next
End Sub
...