사용자 컨트롤 작성시 사용자 컨트롤에 다른 컨트롤들을
배치 시킬수 있도록 하기 위한 방법입니다.
UserControl (TestControl) 을 만들고 사용자가 편집 가능하게 할 컨트롤을 아래 처럼 정의합니다.
namespace Test
{
public partial class TestControl : UserControl
{
/// <summary>
/// 사용자 정의 판넬입니다.
/// </summary>
[Category("Test")]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel UserPanel => this.userPanel;
}
}
ParentControlDesigner 를 상속받는 디자이너 클래스를 추가합니다.
using System.ComponentModel;
using System.Windows.Forms.Design;
namespace Test
{
public class TestControlDesigner : ParentControlDesigner
{
public override void Initialize(IComponent component)
{
base.Initialize(component);
TestControl testControl = component as TestControl;
if (dsGridSelector != null)
{
base.EnableDesignMode(dsGridSelector.UserPanel, "UserPanel");
}
}
}
}
UserControl 의 상단에 아래 처럼 처리합니다.
namespace Test
{
[Designer(typeof(TestControlDesigner))]
public partial class TestControl : UserControl
{
/// <summary>
/// 사용자 정의 판넬입니다.
/// </summary>
[Category("Test")]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel UserPanel => this.userPanel;
}
}
이게 디자이너 단에서 UserPanel 부분으로 다른 컨트롤 들을 배치 시킬수 있습니다.
만약 Panel 안의 Panel 을 처리하고 싶을때는 부모 판넬도 위와 같은 처리를 해야
정상적으로 동작합니다.
예시)
Panel1 안에 Panel2 가 있는 경우 Panel2 로 디자이너에서 편집이 가능하게 할 경우
namespace Test
{
[Designer(typeof(TestControlDesigner))]
public partial class TestControl : UserControl
{
/// <summary>
/// 사용자 정의 판넬1입니다.
/// </summary>
[Category("Test")]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel UserPanel1 => this.userPanel1;
/// <summary>
/// 사용자 정의 판넬2입니다.
/// </summary>
[Category("Test")]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel UserPanel2 => this.userPanel2;
}
}
using System.ComponentModel;
using System.Windows.Forms.Design;
namespace Test
{
public class TestControlDesigner : ParentControlDesigner
{
public override void Initialize(IComponent component)
{
base.Initialize(component);
TestControl testControl = component as TestControl;
if (dsGridSelector != null)
{
base.EnableDesignMode(dsGridSelector.UserPanel1, "UserPanel1");
base.EnableDesignMode(dsGridSelector.UserPanel2, "UserPanel2");
}
}
}
}
'C# > Winform' 카테고리의 다른 글
[C#] 이미지를 바이트 배열로 변환하기 (Image to byte[]) (0) | 2019.05.24 |
---|---|
[C#.NET/C#] 빗썸 Open API 를 이용해 가상화폐정보 가져오기 (0) | 2019.05.21 |
C# 코딩의 기술 (0) | 2019.04.29 |
Image 다루는 코드 모음 (0) | 2019.04.16 |
Effective c# 정리 2. const 보다는 readonly가 좋다. (0) | 2019.03.05 |