문제

나는 C#이 무엇을하고 어떻게하는지 배우고 이해하려고 노력하고 있습니다. 저는 역사적으로 Visual FoxPro (VFP) 개발자이며, 사용자 컨트롤의 기준선을 생성하여 응용 프로그램을 넓게 사용할 수 있습니다.

C#의 유사점을 배우려고 할 때, 나는 무언가에 붙어 있습니다. 글꼴 "Arial", 10 포인트로 정의 된 내 자신의 레이블 컨트롤 (컨트롤은 레이블의 서브 클래스)을 도출한다고 가정 해 봅시다. 그런 다음 어떤 형태로든 디자이너는 양식 클래스의 "Designer.cs"부분에서 볼 수있는 일부 속성 값을 자동으로 미리 채우게됩니다.

this.LabelHdr2.AutoSize = true;
this.LabelHdr2.Font = new System.Drawing.Font("Arial", 14F, System.Drawing.FontStyle.Bold);
this.LabelHdr2.ForeColor = System.Drawing.Color.Blue;
this.LabelHdr2.Location = new System.Drawing.Point(150, 65);
this.LabelHdr2.Name = "LabelHdr2";
this.LabelHdr2.Size = new System.Drawing.Size(158, 22);
this.LabelHdr2.TabIndex = 5;
this.LabelHdr2.Text = "LabelHdr2";

컨트롤이 양식에 올 때마다 글꼴, 색상, 크기,자가 크기가 생성되는 것을 방지하고 싶습니다. 나중에 글꼴을 "Arial"10에서 "Tahoma"11으로 변경하기로 결정한 경우 모든 형태 (및 기타 사용자 정의 컨트롤)로 돌아가서 편집하여 변경해야합니다.

VFP에서베이스 클래스의 어떤 것도 변경하면 모든 양식이 변경 사항을 자동으로 인식합니다. 크기 크기 충격을 통한 가능한 정렬을 제외하고는 아무것도 편집 할 필요가 없습니다.

C#에서는 다시 돌아가서 각 양식을 변경하여 클래스의 새로운 / 업데이트 값으로 인식해야합니다 ...

이것을 피할 수있는 합리적인 방법이 있습니까?

도움이 되었습니까?

해결책

다음은 다음을 사용하는 간단한 솔루션입니다 ReadOnlyAttribute 파생 수업에서.

class MyLabel : Label
{
    [ReadOnly(true)]
    public override Font Font
    {
        get { return new Font(FontFamily.GenericMonospace, 10); }
        set { /* do nothing */ }
    }
}

그만큼 ReadOnlyAttribute vs.net 디자이너에서 속성 편집을 비활성화합니다.

다른 팁

"ReadonLyAttribute"를 사용하는 대신 "사용해보십시오."defaultValueatTribute"대신. 올바르게 기억한다면, 디자이너는 현재 값이"defaultValueatTribute "에 저장된 값과 일치하는 경우 속성을 설정하기 위해 코드를 작성해서는 안됩니다.

추가 해보세요 Readonly 속성 파생 클래스의 속성에 :

[ReadOnly(true)]
public override Font Font
{
    get{ // Your Implementation Here }
    set{ // Don't really care,do you? }
}

ReadonLyAttribute는 설계 시간에 Readonly 행동을 시행해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top