Visual Basic循环并一次显示一行

时间:2010-01-20 04:08:30

标签: vb.net visual-studio-2008 string

我正在使用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

我试过这个,以及其他循环结构,似乎无法把事情做对。实际的应用程序有点复杂,但该示例很适合逻辑用途。

欢迎任何提示,谢谢!

6 个答案:

答案 0 :(得分:3)

您需要在OutputLabel.Text中连接值。

OutputLabel.Text &= "UserInput " & UserInput

您可能还想在循环之前重置它:OutputLabel.Text = ""

答案 1 :(得分:3)

这是简单的版本:

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

但是,它有两个问题,而其他问题(包括目前给出的其他答案):

  1. 它创造了许多额外的字符串
  2. 由于它处于循环,因此在完成所有处理之前,标签将无法处理任何绘制事件以进行更新。
  3. 所以你也可以这样做:

    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))
    

答案 2 :(得分:1)

如果您需要迭代索引,可以尝试类似以下内容

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

如果您在集合中有用户输入,则最好使用ForEach循环来提供服务。

答案 3 :(得分:1)

您需要在GUI中执行此操作吗?如果它只是处理和输出这样的行,也许你应该考虑一个控制台应用程序,在这种情况下它变得非常简单,只需调用

Console.WriteLine("my string")

答案 4 :(得分:1)

我会使用更合适的控件,例如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

答案 5 :(得分:1)

所有这些方式实际上都很有效,但最符合我情况的是:

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

我将内容更改为列表框,但尝试使用文本框和标签的相同方法,通过一些调整,它们都运行良好。谢谢你的帮助!