gpt4 book ai didi

.net - 如何使列表框刷新其项目文本?

转载 作者:行者123 更新时间:2023-12-03 06:31:14 25 4
gpt4 key购买 nike

我正在为那些还没有意识到像 ListBox 这样的控件不必包含字符串的人举一个例子;他一直在存储格式化字符串并跳过复杂的解析环,以将数据从 ListBox 中取出,我想向他展示有更好的方法。

我注意到,如果我在 ListBox 中存储了一个对象,然后更新影响 ToString 的值,则 ListBox 不会自行更新。我尝试在控件上调用 RefreshUpdate,但都不起作用。这是我正在使用的示例的代码,它要求您将一个列表框和一个按钮拖到表单上:

Public Class Form1

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)

For i As Integer = 1 To 3
Dim tempInfo As New NumberInfo()
tempInfo.Count = i
tempInfo.Number = i * 100
ListBox1.Items.Add(tempInfo)
Next
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each objItem As Object In ListBox1.Items
Dim info As NumberInfo = DirectCast(objItem, NumberInfo)
info.Count += 1
Next
End Sub
End Class

Public Class NumberInfo

Public Count As Integer
Public Number As Integer

Public Overrides Function ToString() As String
Return String.Format("{0}, {1}", Count, Number)
End Function
End Class

我认为问题可能出在使用字段上,并尝试实现INotifyPropertyChanged,但这没有效果。 (我使用字段的原因是因为它是一个示例,我不想添加与我演示的主题无关的几十行。)

老实说,我以前从未尝试过像这样更新项目;过去我总是添加/删除项目,而不是编辑它们。所以我从来没有注意到我不知道如何进行这项工作。

那么我错过了什么?

最佳答案

当我需要更新列表框时,我使用此类。

更新列表中的对象,然后调用其中的任一方法,具体取决于索引是否可用。如果您要更新列表中包含的对象,但没有索引,则必须调用 RefreshItems 并更新所有项目。

public class RefreshingListBox : ListBox
{
public new void RefreshItem(int index)
{
base.RefreshItem(index);
}

public new void RefreshItems()
{
base.RefreshItems();
}
}

关于.net - 如何使列表框刷新其项目文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com