Как обновить просмотр списка после Form.Show - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть форма со списком.После вызова Form.Show мне нужно обновить мой список.Однако после вызова Form.Show независимо от моего кода просмотра списка он появляется пустым, без столбцов и без данных.Если я переместлю Form.Show до тех пор, пока мой код просмотра списка не будет выполнен, список будет отображаться правильно.

Вот мой код просмотра списка:

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();
}

Примечание: у меня есть другая форма, которая очень похожа, но имеет TreeView, который кто-то еще расширил, который работает как нужно.

Есть мысли?

РЕДАКТИРОВАТЬ 1 Эта форма должна быть единичной.После прочтения этого поста мой код Form.Show структурирован следующим образом:

        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.

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Вы должны обработать событие Form.Shown , чтобы обновить представление списка.

0 голосов
/ 03 января 2012

Единственное решение, которое я смог найти, - это вызвать Form.Show () после того, как мой список был полностью заполнен. Поэтому я создаю свой собственный Form.Show, переопределяя Form.Show.

public new void Show()
{
    if (_showdialog)
    {
        _dialog.Show(Control.FromHandle(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle));
    }
    else
    {
        _dialog.BringToFront();
    }
}

Вызов этого метода после того, как мой просмотр списка решит мою проблему. Тем не менее, все мои другие диалоги (не использующие просмотр списка) работают, как и ожидалось, с кодом из исходного поста. Спасибо Гансу Пассанту за то, что он привел меня к этому решению.

...