2013-02-03 1 views
4

ASP.NET뿐만 아니라 WinForms에서도 사용할 수있는 사용자 정의 그래픽 컨트롤을 개발하고 싶습니다. 컨트롤은 일부 속성 설정 및 관련 규칙에 따라 이미지를 렌더링합니다.WinForms 및 ASP.NET 사용자 정의 컨트롤에 대한 공통 코드

분명히 WinForms 버전의 코드를 ASP.NET 버전으로 복제 할 수는 있지만 오류가 있거나 규칙이 변경된 경우 업데이트 할 버전이 두 가지 있습니다.

나는 속성이 기본 클래스를 가리키는 것입니다 다양한 속성 필요한 규칙과 윈폼 및 ASP.NET 컨트롤 클래스로, 기본 클래스를 작성할 수, 뭔가 같은 :

public class MyControlCore 
{ 
    // all properties and control rules 

    public void PaintTo(Graphics graphics) 
    { 
     // rendering of control 
    } 
} 

public class MyWinFormsControl: Control 
{ 
    public MyWinFormsControl(Control parent): base(parent) 
    { 
     CoreControl = new MyControlCore(); 
    } 

    public MyControlCore CoreControl { get; private set; } 

    protected override OnPaint(object sender, PaintEventArgs e) 
    { 
     CoreControl.PaintTo(e.Graphics); 
    } 
} 

이 의지 하지만, 속성 그리드에서 사용자 정의 속성이 들어있는 속성 CoreControl을 얻을 수 있습니다. 하위 속성이있는 CoreControl 속성 대신 속성 표에 MyControlCore 속성을 표시하는 방법이 있습니까?

TypeDescriptionProvider 및 관련 클래스를 사용하여이 작업을 수행 할 수 있다고 생각했지만 계속 진행할 방법이 확실하지 않으며 나중에 결과를 얻을 수도 있습니다. 나는 이것이 디자이너에게만 도움이된다는 것을 알고 있지만 괜찮습니다.

답변

2

다른 선택이 있습니다. partial classes을 사용하고 두 프로젝트에서 링크 할 수있는 단일 파일에 공통 코드를 넣을 수 있습니다.

+2

흥미 롭습니다. 그래서 부분 클래스'MyControl'을 포함하는 파일을 생성 할 것입니다. 그 안에 모든 일반적인 것들이 들어 있습니다. 그리고 나서 WinForms 프로젝트에서 클래스 파일을 만들고 동일한 부분 클래스를 선언하고, System.Windows.Forms에서 파생시킵니다. Control '을 클릭하고 첫 번째 파일을 프로젝트에 연결 한 다음 다른 프로젝트의 ASP.NET 컨트롤에 대해 동일한 작업을 수행합니다. 나는 그것을 정확하게 이해 했는가? – MarcelB

+1

문제의 더 단순하고 세련된 접근 방식이므로 답변을 수락하십시오. 감사. – MarcelB

관련 문제