2012-08-28 3 views
2

3 분할 컨테이너 (각각 2 개 패널, 총 6 개 패널)가 포함 된 Windows 응용 프로그램을 개발 중입니다. 이제 3 개의 레이블을 각 패널에 동적으로 추가하고 싶습니다. 하나의 솔루션은 루프를 사용하고 모든 splitcontainers 및 패널에 액세스하려고하지만 splitcontainer에 액세스하기 위해 루프를 사용하는 방법을 모릅니다. for 루프를 사용할 수 있습니까? 또한 동시에 모든 패널 (6)에 컨트롤을 추가하고 싶습니다. 어떻게하는지. 미리 감사드립니다 .. !! 이 내가 한 일입니다 ...분할 창에서 for 루프를 사용하여 분할 컨테이너에 컨트롤을 추가하는 방법

foreach (SplitContainer sp in this.Controls) 
     {   
      Label tileTitle = new Label(); 
      tileTitle.Text = "OneClick"; 
      tileTitle.Visible = true; 
      tileTitle.Location = new Point(10, 10); 
      sp.Panel1.Controls.Add(tileTitle); 
     } 
+0

자세한 내용을하시기 바랍니다. 스플릿 콘테이너는 어디에 보관합니까? 직접 양식이나 컨테이너에? – varg

답변

2
foreach (Control c in this.Controls) 
{ 
    if (c is SplitContainer) 
    { 
     Label tileTitle = new Label(); 
     tileTitle.Text = "OneClick"; 
     tileTitle.Visible = true; 
     tileTitle.Location = new Point(10, 10); 

     Label tileTitle2 = new Label(); 
     tileTitle2.Text = "OneClick"; 
     tileTitle2.Visible = true; 
     tileTitle2.Location = new Point(10, 10); 

     ((SplitContainer)c).Panel1.Controls.Add(tileTitle); 
     ((SplitContainer)c).Panel2.Controls.Add((tileTitle2)); 
    } 
} 
+0

하지만 패널 2에 titeTitle 텍스트를 추가하려고하면 tileTitle2 텍스트가 겹쳐 표시되지만 위치는 변경됩니다. 필자는 총 6 개의 패널을 포함하는 splitterPanels 배열 하나를 취하여 forloop의 각 패널에 컨트롤을 추가하여 문제를 해결했습니다. 이것을 할 수있는 다른 방법이 있습니까? –

1

봅니다

foreach (SplitContainer sp in this.Controls.OfType<SplitContainer>()) 
{ 
    Label title = MakeLabel("OneClick", new Point(10, 10); 
    sp.Panel1.Controls.Add(title); 
    Label title1 = MakeLabel("OneClick", new Point(10, 10); 
    sp.Panel2.Controls.Add(title1); 
} 

private Label MakeLabel(string caption, Point position) 
{ 
    Label lbl = new Label(); 
    lbl.Text = caption; 
    lbl.Location = position; 
    lbl.Visible = true; 
    return lbl; 
} 

편집 스티브을 SplitContainer가 형의 컨트롤을 얻기 위해 Controls.OfType 확장을 사용하려면, 동일한 레이블을 panel1 및 panel2에 추가하십시오. panel2의 add 메소드에서 변수 이름을 수정했습니다. 스티브가했던 것처럼

+0

감사하지만이 작동하지 않습니다. 컨트롤이 패널 one에 추가되지 않습니다. 저는 총 6 개의 패널을 포함하는 splitterPanels 배열 하나를 취하여 forloop의 각 패널에 컨트롤을 추가하여 문제를 해결했습니다. 이것을 할 수있는 다른 방법이 있습니까? –

0

나는 같은 방법으로 이런 짓을했는지,하지만 당신은 같은 시간에 Dockstyle.Fill 둘 이상의 SplitContainer을 추가 할 수 있기 때문에 나는 모든 splitcontainers를 저장하는 TableLayoutPanel을 사용하고 있습니다.

private void Form1_Load(object sender, EventArgs e) 
    { 
     foreach (SplitContainer sc in this.tableLayoutPanel1.Controls.OfType<SplitContainer>()) 
     { 
      Label title = MakeLabel("OneClick", new Point(10, 10)); 
      sc.Panel1.Controls.Add(title); 
      Label title1 = MakeLabel("TwoClick", new Point(10, 10)); 
      sc.Panel2.Controls.Add(title1); 
     } 
    } 

    private Label MakeLabel(string caption, Point position) 
    { 
     Label lbl = new Label(); 
     lbl.Text = caption; 
     lbl.Location = position; 
     lbl.Visible = true; 
     return lbl; 
    } 

여기에서 볼 수 있듯이이 솔루션은 완벽하게 작동합니다 : http://imageshack.us/photo/my-images/838/splitcontainer.png/

+0

대단히 고마워하지만 내 문제를 해결했습니다 .. !!! –

+0

답변을 수락하는 것으로 표시하는 것을 잊지 마세요. 다른 사용자가 관련 문제를 해결할 수 있도록 도와줍니다. 감사. – varg