2011-12-30 3 views
0

나는 listview가있는 Form을 가지고 있습니다. Form.Show를 호출 한 후 내 listview를 업데이트해야합니다. 그러나 FormviewShow가 내 listview 코드에 관계없이 호출 된 후에는 비어 있고 열이없고 데이터도 표시되지 않습니다. 내 Listview 코드까지 Form.Show를 이동하면 목록보기가 올바르게 표시됩니다.Form.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 이 양식은 단일 인스턴스 여야합니다. 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는 언제 채워 집니까? –

+0

Form.Show 다음에 채워집니다. _snapshots를 채우면 위의 메소드가 트리거됩니다. – Web

+0

그래서 Form.Show는 그 문제와 아무런 관련이 없습니까? 채우기가 호출됩니다. 관련 루틴에 몇 가지 디버그를 넣고, 일어나고 있다고 생각하는 것이 일어나는지 확인하십시오. "doh"순간이되면 코드를 잘못 게시 한 것을 볼 수 없습니다. –

답변

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

listview를 업데이트하려면 Form.Shown 이벤트를 처리해야합니다.

+0

죄송합니다 ... 팔로우하지 않습니다. 이 이벤트로 무엇을합니까? 이 이벤트가 트리거 될 때 내 InitializeListView 메서드를 실행 하시겠습니까? – Web

+0

코드를 수정하여 Form.Shown 이벤트에서 위의 InitializeListView 메서드를 실행합니다. 원래 게시물에서와 동일한 결과. – Web

관련 문제