2010-07-19 9 views
0

Panel에 중첩 된 FlowLayoutPanel으로 구성된 사용자 지정 컨트롤을 작성하고 있습니다. FlowLayoutPanel은 클래스 내부에 있으므로 디자이너가 볼 수 없어야합니다 (개별 속성이 노출 된 Tab과 달리). 디자이너가 Panel에 추가하는 컨트롤은 FlowLayoutPanel에 추가해야합니다. 이 런타임 동안 추가 컨트롤 작동사용자 지정 중첩 컨테이너 컨트롤

public class SlidePanel : Panel 
{ 
    private FlowLayoutPanel _panel; 

    public SlidePanel() 
     : base() 
    { 
     _panel = new FlowLayoutPanel(); 
     Controls.Add(_panel); 
     _panel.Location = new Point(0, 0); 
     _panel.Size = base.Size; 
     _panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Top; 

     ControlAdded += new ControlEventHandler(SlidePanel_ControlAdded); 
    } 

    void SlidePanel_ControlAdded(object sender, ControlEventArgs e) 
    { 
     Controls.Remove(e.Control); 
     _panel.Controls.Add(e.Control); 
    } 
} 

을하지만, 내가 디자인 타임 컨트롤을 추가 할 때, 그것은 'child' is not a child control of this parent.을 말한다 또는 대신 컨트롤에게 양식을 추가 중 : 여기에 지금까지 무슨이다. 이 작업을 수행하는 데 더 깔끔하고 좋은 방법이 있다고 가정하고 있습니까? Flynn1179's suggestion


테스트 :

public class SlideControl : FlowLayoutPanel 
{ 
    private const int SB_HORZ = 0x0; 
    private const int SB_VERT = 0x1; 

    [DllImport("user32.dll")] 
    private static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); 
    [DllImport("user32.dll")] 
    private static extern int GetScrollPos(IntPtr hWnd, int nBar); 

    public SlideControl() 
     : base() 
    { 
     this.MouseMove += new MouseEventHandler(SlideControl_MouseMove); 
    } 

    void SlideControl_MouseMove(object sender, MouseEventArgs e) 
    { 
     HScrollPos = e.X; 
     VScrollPos = e.Y; 
    } 

    protected int HScrollPos 
    { 
     get { return GetScrollPos((IntPtr)this.Handle, SB_HORZ); } 
     set { SetScrollPos((IntPtr)this.Handle, SB_HORZ, value, true); } 
    } 

    protected int VScrollPos 
    { 
     get { return GetScrollPos((IntPtr)this.Handle, SB_VERT); } 
     set { SetScrollPos((IntPtr)this.Handle, SB_VERT, value, true); } 
    } 
} 

답변

0

당신이 FlowLayoutPanel보다는 하나를 포함에서 직접 SlidePanel 상속을 가진 생각이 있나요?

+0

'SlidePanel'은'FlowLayoutPanel'을 앞뒤로 움직이기 때문에 ('Slide',) 별도의 컨테이너 여야합니다. – dlras2

+0

어떤 점에서? 패딩 설정을 사용하여 내용의 위치를 ​​조작 할 수 있습니다. – Flynn1179

+0

스크롤 막대가 작동하는 방식과 비슷하지만 스크롤 막대가없는 마우스 오버시 자동으로 수행됩니다. 요점은 사용자가 컨트롤의 긴 목록에 끌어다 놓을 수 있도록하는 것입니다. – dlras2

관련 문제