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); }
}
}
'SlidePanel'은'FlowLayoutPanel'을 앞뒤로 움직이기 때문에 ('Slide',) 별도의 컨테이너 여야합니다. – dlras2
어떤 점에서? 패딩 설정을 사용하여 내용의 위치를 조작 할 수 있습니다. – Flynn1179
스크롤 막대가 작동하는 방식과 비슷하지만 스크롤 막대가없는 마우스 오버시 자동으로 수행됩니다. 요점은 사용자가 컨트롤의 긴 목록에 끌어다 놓을 수 있도록하는 것입니다. – dlras2