如何在Form.Show之后更新listview
本文关键字:之后 更新 listview Show Form | 更新日期: 2023-09-27 18:19:02
我有一个表单的列表视图。在调用Form之后。Show我需要更新我的listview。然而,经过形式。不管listview代码如何,Show都会被调用,显示为空,没有列,没有数据。如果我移动窗体。显示直到我的列表视图代码,列表视图显示正确。
下面是我的listview代码:private void InitializeListView()
{
_snapshotList.BeginUpdate();
_snapshotList.Items.Clear();
foreach (ISnapshot snapshot in _snapshots)
{
string comment = InstanceFactory<ProjectRecoveryService>.Instance.RetrieveCommentsforSnapshot(snapshot);
string[] sub = new string[] { snapshot.Name, snapshot.Version.ToString(), snapshot.CreatedDate.ToString(), comment };
ListViewItem item = new ListViewItem(sub);
item.Tag = snapshot;
this._snapshotList.Items.Add(item);
}
_snapshotList.EndUpdate();
this._snapshotList.Refresh();
}
一个旁注,我有另一个形式,是非常相似的,但有一个树视图,别人已经扩展其工作所需的
任何想法吗?
编辑1 这个表单需要是一个实例。看完这篇文章,我的表格。显示代码的结构如下:
public static RestoreSnapshotDialog GetInstance()
{
if (_dialog == null)
{
_dialog = new RestoreSnapshotDialog();
_dialog.Show(Control.FromHandle(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle));
}
else
{
_dialog.BringToFront();
}
return _dialog;
}
在FormClosed事件中,我设置_dialog = null。
你必须处理表单。
我能找到的唯一解决方案是在列表视图完全填充后调用Form.Show()。所以我创建了自己的Form。通过重写Form.Show.
public new void Show()
{
if (_showdialog)
{
_dialog.Show(Control.FromHandle(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle));
}
else
{
_dialog.BringToFront();
}
}
在listview之后调用这个方法解决了我的问题。然而,我所有的其他对话框(不使用listview)工作与原帖子的代码预期。感谢Hans Passant为我提供了这个解决方案。