2011-12-30 45 views
0

我有一個帶有列表視圖的窗體。調用Form.Show後,我需要更新我的列表視圖。但是,無論我的列表視圖代碼調用Form.Show後,它都會出現空白,沒有列,沒有數據。如果我將Form.Show移動到我的列表視圖代碼之後,那麼listview將正確顯示。如何在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 這種形式需要一個實例。閱讀this post後,我的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; 
     } 

在我設置_dialog = null,則FormClosed事件。

+0

_snapshots何時填充? – 2011-12-30 13:14:03

+0

它在Form.Show後得到填充。填充_snapshots會觸發上述方法。 – Web 2011-12-30 13:18:52

+0

那麼Form.Show與這個問題無關嗎?填充何時被調用。對相關的例程進行一些調試,確保你認爲正在發生的事情正在發生。要成爲「doh」時刻,這不會看到您發佈的代碼有任何問題。 – 2011-12-30 13:52:57

回答

0

我能找到的唯一解決方案是在我的listview完全填充後調用Form.Show()。所以我通過重寫Form.Show來創建自己的Form.Show。

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

在我的列表視圖解決了我的問題後調用此方法。但是,所有其他對話框(不使用listview)都可以按照預期的方式使用原始帖子中的代碼進行工作。感謝Hans Passant爲我帶來這個解決方案。

1

你必須處理Form.Shown事件來更新列表視圖。

+0

對不起...沒有關注。我該怎麼處理這個事件?當這個事件被觸發時運行我的InitializeListView方法? – Web 2011-12-30 13:25:01

+0

我修改了我的代碼,在Form.Shown事件中運行上面的InitializeListView方法。仍然是原來的帖子相同的結果。 – Web 2011-12-30 13:34:05