2009-10-07 5 views
18

를 작동하지 않는 것은 여기에 내 코드입니다 : 간단히 말해서비주얼 스튜디오 TabControl.TabPages.Insert이

public MainForm() 
    { 
     InitializeComponent(); 

     MyServiceSettings obj = (MyServiceSettings)ConfigurationManager.GetSection("MyServiceSettings"); 

     foreach (MyServiceConfigElement service in obj.Services) 
      CreateServiceControl(service); 
    } 

    private void CreateServiceControl(MyServiceConfigElement service) 
    { 
     TabPage tp = new TabPage(service.Name); 
     tabControl1.TabPages.Insert(0, tp); 
     //tabControl1.TabPages.Add(tp); 
     tabControl1.Refresh();  
    } 

, 그것은 설정 파일의 섹션을 읽고 섹션의 각 요소에 대한 탭을 만듭니다.

디자인 타임에 이미 하나의 정적 TabPage가 만들어졌습니다. 이 정적 탭 앞에 동적으로 생성 된 탭을 삽입하고 싶습니다.

이 코드를 실행하면 tabcontrol에는 정적 탭 페이지 만 표시됩니다. 나는이 변화 할 경우

: 추가 방법을 사용하여

 private void CreateServiceControl(SoftInfoServiceConfigElement service) 
    { 
     TabPage tp = new TabPage(service.Name); 
     //tabControl1.TabPages.Insert(1, tp); 
     tabControl1.TabPages.Add(tp); 
     tabControl1.Refresh(); 
    } 

는 모든 페이지를 보여줍니다. 그러나 나는 내가 원하는 명령을받지 못한다.

Insert 메서드를 사용하여 이해할 수없는 것이 있습니까? 왜 그게 효과가 있니?

답변

37

social.msdn에 대한 의견이있다 - 나는 문서에서이 같은 아무것도 찾을 수 있지만 :

을 TabControl의 핸들은

가 언급 한 시도 작업을 삽입하는 방법에 대해 작성해야합니다

당신의 서비스

을 통해 당신 루프 전에 코드

IntPtr h = this.tabControl1.Handle; 

+1

감사합니다. 이 문제를 해결하면 문제가 해결되었습니다. – vIceBerg

+2

나는 그것이 그렇게 어리 석다는 것을 믿을 수 없다. 어쨌든 그것이 효과가있다! – Zyo

+0

굉장한 대답. 너무 단순하지만 아직 알려지지 않았습니다. +1 – mihirj

1

Insert() 메서드에 동일한 인덱스를 전달하고 있습니다. 단순히 증분하려는 경우 다음을 입력해야합니다.

// ... 

int i = 0; 
foreach (MyServiceConfigElement service in obj.Services) 
      CreateServiceControl(service, i++); 

// ... 

private void CreateServiceControl(MyServiceConfigElement service, int i) 
{ 
     TabPage tp = new TabPage(service.Name); 
       tabControl1.TabPages.Insert(i, tp); 
// ... 

}