카테고리 없음

[씨#] 다른 자식 컨트롤을 사용하기 위해 사용자 컨트롤에서 상속

행복을전해요 2021. 1. 5. 14:55

두 디자이너 파일을 동일하게 유지하려면 다음을 시도하십시오. 실제 Grid 컨트롤을 GridMasterControl에 놓는 대신 패널을 자리 표시 자로 놓기 만하면됩니다.

그런 다음 적절한 그리드 객체가 생성되는 필수 초기화 단계를 생성합니다 (IGrid와 같은 인터페이스 사용). 이것은 파생 클래스에서 수행 할 수 있습니다.

여기에 제가 의미하는 바는 물론 동일한 패턴을 몇 가지 다른 방법으로 구현할 수 있습니다. AbstractGridMasterControl의 구체적인 구현간에 공유하는 코드의 양은 다를 수 있으며 컨트롤이 얼마나 유사한 지에 따라 다릅니다. IGrid 인터페이스 대신 부모 클래스를 사용할 수 있습니다. 다시 말하지만 상속을 원하는 방식이 중요합니다.

interface IGrid {...}
class Grid : IGrid { ...}
class EditableGrid : IGrid { ... }

abstract class AbstractGridMasterControl
{
    protected IGrid Grid
        {
                set { this.panelControl.Controls.Add(value as Control);}
                    }
                    }
                    
                    class GridMasterConrol : AbstractGridMasterControl
                    {
                        public GridMasterControl()
                            {
                                    this.Grid = new Grid();
                                        }
                                        }
                                        
                                        class EditableGridMasterConrol : AbstractGridMasterControl
                                        {
                                            public GridMasterControl()
                                                {
                                                        this.Grid = new EditableGrid();
                                                            }
                                                            }
                                                            
-------------------

속성 EditableGridMasterControl이있는 하나의 컨트롤을 가질 수 ReadOnly없습니까? 이것이 true로 설정되면 편집을 비활성화합니다. 이렇게하면 유지 관리 할 컨트롤 집합이 하나만 제공되지만 컨트롤이 단순한 GridMasterControl.

-------------------

아마도 당신은 사용하여 볼 수 있었다 구성 패턴을 하여 다른 컨트롤 사이에 공통 기능을 재사용 할 수 있습니다.

-------------------

GridMasterControl두 그리드 클래스에 대해 동일한 작업을 수행하는 경우 아무것도 변경할 필요가 없습니다.의 Grid멤버 GridMasterControlEditableGrid.



출처
https://stackoverflow.com/questions/2005777