2011-12-30 11 views
0

私はリストビューを持つフォームを持っています。 Form.Showを呼び出した後、私はリストビューを更新する必要があります。しかし、私のリストビューのコードにかかわらず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コントロールを持つ別のフォームを持っています。

どのような考えですか?

EDIT 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; 
     } 

私は_dialog = nullに設定FormClosedイベントの場合:this postを読んだ後、私のForm.Showコードは次のように構成されています。

+0

_snapshotsにはいつデータが取り込まれますか? –

+0

Form.Showの後に入力されます。 _snapshotsを生成すると、上記のメソッドがトリガされます。 – Web

+0

Form.Showはこの問題とは関係ありません。データはいつ呼び出されますか?関連するルーチンにいくつかのデバッグを入れ、起こっていると思われることが起こっていることを確認してください。あなたが投稿したコードには何も間違っていることはありません。 –

答えて

0

私の見つけることができる唯一の解決策は、私のリストビューが完全に取り込まれた後にForm.Show()を呼び出すことでした。だから私はForm.Showをオーバーライドして自分自身のForm.Showを作成します。

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

私のリストビューの後でこのメソッドを呼び出すと、自分の問題が解決されます。しかし、私の他のすべてのダイアログ(リストビューを使用していない)は、元の投稿のコードでは期待通りに動作します。このソリューションに私を導いてくれたHans Passantに感謝します。

1

リストビューを更新するには、Form.Shownイベントを処理する必要があります。

+0

申し訳ありませんが次のとおりです。このイベントで私は何をしますか?このイベントが発生したときにInitializeListViewメソッドを実行しますか? – Web

+0

Form.Shownイベントで上記のInitializeListViewメソッドを実行して自分のコードを変更しました。元の投稿と同じ結果です。 – Web

関連する問題