工作是在许多线程中完成的,并且从这些线程中更新了一个TListView。它们各自在ListView中都有对其关联的listview的引用,因此,如果稍后对listview进行排序并不重要。无论如何,正确的单元格将被更新。
但是现在我想使用一个字符串网格而不是listview。但是,如果用户对字符串网格进行排序,线程如何知道要更新哪个单元格?我发现在回调线程中没有引用。我想要一份推荐信,不用每次都查到正确的单元格。这个是可能的吗?
编辑:下面是我在评论中讨论过的列表中存储的内容:
TInfoPackList包含类型为:
TInfoPack = class
ID: Integer;
Name: string;
Location: string;
Thread: TMyThread;
end;有更多的成员,但这些是相关的网格显示。
发布于 2015-02-18 07:32:47
德尔菲中的TStringGrid不具备排序功能,在这种情况下,您必须手动对其进行排序,因此您将能够保留哪个单元格属于哪个线程的列表。很简单。
使用TMS TAdvStringGrid,您可以使用OnRawCompare事件对每个单元格进行比较,以进行手动排序,您还可以保存哪个单元格属于哪个线程的列表。
但老实说,我宁愿做以下几件事:
请始终记住,您必须有访问列表的线程安全方法。比如CriticalSections。TThreadList具有锁功能,它将列表访问锁定,直到解锁。
您必须在这里做更多的工作,因为就像MBo在这里回答的那样,与TListView不同,StringGrid只存储它显示的字符串,而不是可以从线程访问的对象。因此,除非您搜索字符串,否则线程很难知道字符串在StringGrid中的位置,但是重复字符串又如何呢?因此,答案在于将数据存储在其他地方,就像我前面描述的那样,然后只使用StringGrid作为数据的显示。
发布于 2015-02-18 07:05:27
线程必须处理一些数据存储,而不是可视化组件。网格只是以所需的顺序显示数据存储的内容。如果需要在存储中保持排序顺序,请维护索引。
注意,这种方法类似于DataSet+TDBGrid
编辑:
https://stackoverflow.com/questions/28576862
复制相似问题