如何在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之后更新listview

你必须处理表单。

我能找到的唯一解决方案是在列表视图完全填充后调用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为我提供了这个解决方案。