Цикл Visual Basic и Дисплей одна строка за один раз

Я использую Visual Studio 2008, VB9, и я пытаюсь записать приложение, которое в основном выполняет вычисления на ряде ввода данных пользователем. Во время вычислений я хочу отобразить данные на каждом шаге и сохранить его в области дисплея на GUI (не перезаписанный следующими отображаемыми данными).

Например:

UserInput = 1

Do

  UserInput += 1

  OutputLabel.Text = "UserInput " & UserInput

Loop Until UserInput = 5

и вывод был бы похож

UserInput 1 UserInput 2 UserInput 3 UserInput 4 UserInput 5

Я попробовал это и другие циклические структуры и, может казаться, не разбираюсь в вещах. Реальное приложение немного более сложно, но пример служит хорошо в логических целях.

Любые подсказки приветствуются, Спасибо!

5
задан Joel Coehoorn 20 January 2010 в 04:31
поделиться

6 ответов

Убедитесь, что включен файл заголовка, содержащий определение malloc ():

#include "stdlib.h"
-121--1853147-

Включен ли соответствующий файл заголовка?

То есть в верхней части файла есть строка, в которой написано

#include <stdlib.h>

Надеюсь, что это поможет.

-121--1853146-

Это простая версия:

Dim delimiter as String = ""
For UserInput As Integer = 1 To 5
    OutputLabel.Text &= String.Format("{0}UserInput {1}", delimiter, UserInput)
    delimiter = " "
Next

Однако есть две проблемы с ним и другие, подобные ему (включая каждый другой ответ, данный до сих пор):

  1. Это создает много дополнительные последовательности
  2. Так как это в цикле метка не сможет обрабатывать любые события краски, чтобы обновить себя, пока вы не закончите все

Так что вы также можете просто сделать это:

Dim sb As New StringBuilder()
Dim delimiter As String = ""
For UserInput As Integer = 1 To 5
    sb.AppendFormat("{0}UserInput {1}", delimiter, UserInput)
    delimiter = " "
Next
OutputLabel.Text = sb.ToString()

И если вы действительно хотите повеселиться, вы можете просто сделать что-то подобное ( не требуется цикл! ):

OutputLabel.Text = Enumerable.Range(1, 5).Aggregate(Of String)("", Function(s, i) s & String.Format("UserInput {0} ", i))
3
ответ дан 13 December 2019 в 22:07
поделиться

Вам необходимо объединить значение в outputlabel.text .

OutputLabel.Text &= "UserInput " & UserInput

Вы также можете захотеть сбросить его перед циклом: outdoylabel.text = ""

3
ответ дан 13 December 2019 в 22:07
поделиться

Вам нужно сделать это в графическом интерфейсе? Если это просто обрабатывает и выводит такие ряды, может быть, вы должны рассмотреть консольный приложение, в этом случае это становится действительно легким, просто призывающим

Console.WriteLine("my string")
1
ответ дан 13 December 2019 в 22:07
поделиться

Я бы использовал более подходящий контроль, например, RichtextBox

    Dim UserInput As Integer = 0
    Const userDone As Integer = 5

    RichTextBox1.Clear()
    Do

        RichTextBox1.AppendText(String.Format("User input {0:n0}   ", UserInput))
        RichTextBox1.AppendText(Environment.NewLine)
        RichTextBox1.Refresh() 'the data at each step
        UserInput += 1

    Loop Until UserInput = userDone
1
ответ дан 13 December 2019 в 22:07
поделиться

Если вам нужен итерационный индекс, вы можете попробовать что-то вроде следующего

For I As Integer = 1 To 5
     If I > 1 Then OutputLabel.Text &= " "
     OutputLabel.Text &= "UserInput " & I.ToString()
End For

, если у вас есть пользовательские входы в коллекции, вам может быть лучше, используя Foreach Coop.

1
ответ дан 13 December 2019 в 22:07
поделиться

Все эти способы на самом деле работают действительно хорошо, но тот, который соответствует моей ситуации, - это лучше всего:

Do
  Dim OutputString as String
  Application.DoEvents() 'to make things paint actively
  UserInput += 1
  OutputString = String.Format("{0}", UserInput)
  ListBox.Items.Add(OutputString)


Loop Until UserInput = 5

Я изменил вещи в список списка, но пробовал этот же метод с текстовыми коробками и Этикетки, с некоторыми настройками, все они очень хорошо работали. Спасибо за вашу помощь!

1
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: