如何更新 Listview(Windows 窗体)?

Posted

技术标签:

【中文标题】如何更新 Listview(Windows 窗体)?【英文标题】:How to update Listview (Windows Forms)? 【发布时间】:2021-03-03 20:09:00 【问题描述】:

在 ListView 中,我提取了一些特定的行。我可以在 MessageBox 中正确显示输出。但是如何在我的 ListView 中更新和显示输出?非常感谢您的帮助!

ArrayList listing = new ArrayList();
for (int i = 0; i < listView1.Items.Count; i++)

  int columnNumb = 0; 
  string columnOne= " ";
  string columnTwo = " "; 
  columnOne += listView1.Items[i].Text;
  columnNumb += int.Parse(listView1.Items[i].SubItems[1].Text);
  columnTwo += listView1.Items[i].SubItems[2].Text;
            
  if(columnNumb >= 5)
  
     listing.Add($" columnOne  , columnNumb , columnTwo");
  
                

        
  StringBuilder sb = new StringBuilder();
  foreach (string line in listing)                      
  sb.AppendLine(line.ToString());
  MessageBox.Show(sb.ToString());




enter image description here

【问题讨论】:

这能回答你的问题吗? How can I make a ListView update after each item is added? 我当然尝试了一切,但没有成功...感谢您指出这一点,acronaut! 【参考方案1】:

也许这篇文章就是你要找的https://docs.microsoft.com/en-us/dotnet/desktop/winforms/controls/how-to-make-thread-safe-calls-to-windows-forms-controls?view=netframeworkdesktop-4.8#:~:text=InvokeRequired%20property%2C%20which%20compares%20the,different%2C%20it%20calls%20the%20Control

总而言之,您要做的是调用函数,在我的情况下,您希望使用参数设置值字符串 b:

SetList(b);

在函数范围之外声明一个委托,如下所示:

delegate void SetListViewCallBacks(string yourtext);

以及在每个回调中设置列表视图项的函数:

private void SetList(string yourtext)

    // InvokeRequired required compares the thread ID of the
    // calling thread to the thread ID of the creating thread.
    // If these threads are different, it returns true.
    if (this.listView1.InvokeRequired)
    
        SetListViewCallBacks d = new SetListViewCallBacks (SetList);
        this.Invoke(d, new object[]  yourtext );
    
    else
    
        this.listView1.Items.Add(yourtext);

    
 

我还没有测试过,但我的逻辑是这会像这样工作。

【讨论】:

这应该做得更简单。如果您想了解更多信息,请查看上面的以下图片。再次感谢您的帮助,“CodeWarrior”!

以上是关于如何更新 Listview(Windows 窗体)?的主要内容,如果未能解决你的问题,请参考以下文章

C# Windows 窗体 ListView 在按宽度自动调整大小 = -1 后获取列的实际宽度?

如何直接在 Windows 窗体应用程序上编辑/添加/更新 datagridview

如何从对象列表添加到 ListView

C#中listview控件是啥东东??咋用的

C#窗体 LISTVIEW

在 Windows 窗体设计器中加载窗体时出现“找不到类型”错误