【问题标题】:Listbox Insert Issue列表框插入问题
【发布时间】:2016-03-27 12:54:46
【问题描述】:

我对此进行了研究,但无法在任何地方找到解决此问题的参考。我创建了代码来随机化文本文档中的大约 20 个项目,并将它们放入表单上的列表框中。这是一份法律文件,因此,一旦随机化,它将以不同的顺序读回文本文件。每个项目都有一个标题:REQUEST FOR ADMISSIONS NO。 # (# 是该问题所在的任何数字)。尽管问题的顺序被打乱了,但我需要那些 # 的数字顺序(1-20)。我一直在努力,直到我让它插入那条线,并增加一个数字。但它正在向后增加它们(参见编辑示例)。 Program output 罪魁祸首语言如下。我认为它在某个地方:

      ListBox1.BeginUpdate()
            Try
                'do with listBox1.Items[i]
                For i As Integer = ListBox1.Items.Count - 1 To 0 Step -1
                    ListBox1.Items.Insert(i, "REQUEST FOR ADMISSION NO. " & nxtNum & vbCrLf)
                    nxtNum += 1
                Next
            Finally
                ListBox1.EndUpdate()
            End Try

注意:我可以通过翻转列表来使其工作。不优雅,但很有效。

            ListBox1.BeginUpdate()

            Try
                'do with listBox1.Items[i]

                For i As Integer = ListBox1.Items.Count - 1 To 0 Step -1

                    ListBox1.Items.Insert(i + 1, "REQUEST FOR ADMISSION NO. " & nxtNum & vbCrLf)
                    nxtNum += 1
                Next

            Finally
                ListBox1.EndUpdate()
            End Try

            nxtNum = 1

            Dim items() As Object = ListBox1.Items.Cast(Of Object).Reverse.ToArray
            ListBox1.Items.Clear()
            ListBox1.Items.AddRange(items)

【问题讨论】:

  • 问题可能出在这一行:“ListBox1.Items.Count - 1 To 0 Step -1”但如果我反转它,即“0 to ListBox1.Items.Count - 1 Step -1 " 它列出了所有的 "REQUESTS FOR ADMISSION NO." [1-20] 在列表框的顶部,而不是根据需要在列表框的每一行之前。

标签: vb.net insert vb.net-2010 listboxitems


【解决方案1】:

如果不是针对一个问题,您在评论中提供的示例应该可以工作:Step -1

For-loop 在执行新迭代时的工作方式如下:

New Value = Current Value + Step

意思是,当你这样做时:

For i As Integer = 0 To ListBox1.Items.Count - 1 Step -1

你一直在做Current Index + (-1),这就是为什么他们最终排名第一;你一直后退一步。

解决此问题的简单方法是将其更改为 Step 1 或完全删除 Step 部分(因为默认步骤是 1,如果省略)。

For i As Integer = 0 To ListBox1.Items.Count - 1
    ...your code...
Next

编辑:

我想我看到了你的实际问题,我错过了......当你添加这些标题时,描述已经存在了。

在这种情况下,你应该能够做到:

For i As Integer = 0 To ListBox1.Items.Count - 1 Step 2
    ...your code...
Next

【讨论】:

  • 我使用了您建议的行 - 它给了我“第 1 号录取请求,第 2 号录取请求”等下降到 20 条。然后它开始了我的文字项目列表。随着“步骤 - 1”,它给了我“第 20 号入学申请(下一行)我的乱码文本项目 1,”申请第 20 号入学申请。 19(下一行)我的乱码文本项目 2 等。这是我需要的,除了数字是 1-20 而不是 20-1。如果您认为有帮助,我可以将整个内容通过电子邮件发送给您。
  • @TareyWolf:好吧,你从来没有向我们展示你是如何插入其他项目的,但你为什么不直接使用我的代码,当你插入“描述”时,循环:For i As Integer = 1 To ListBox1.Items.Count Step 2
  • @TareyWolf :无需发送电子邮件,只需编辑您的问题并告诉我您如何插入其他行。
  • 好的,我想出了一个办法,虽然我知道它并不优雅,但它可以工作: ListBox1.BeginUpdate() Try For i As Integer = ListBox1.Items.Count - 1 To 0 Step -1 ListBox1.Items.Insert(i + 1, "REQUEST FOR ADMISSION NO." & nxtNum & vbCrLf) nxtNum += 1 Next finally ListBox1.EndUpdate() End Try nxtNum = 1 Dim items() As Object = ListBox1.Items .Cast(Of object).Reverse.ToArray ListBox1.Items.Clear() ListBox1.Items.AddRange(items)
  • @TareyWolf :您确实意识到我的解决方案应该按照您刚刚向我展示的那样做,但没有所有额外的逆向代码? 编辑:哦,等等,我想我看到了你的实际问题......我要编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 2020-07-26
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
相关资源
最近更新 更多