2010-02-02 5 views
-1

날짜 전용 사용자 지정 MaskedTextBox를 만듭니다. 이제 사용자로부터 MaskedTextBox의 Mask 속성을 숨기려고합니다.사용자 정의 컨트롤을 만드는 동안 미리 설정된 공용 속성을 비공개로 설정하는 방법

편집 :

public class CustomDateMask:System.Windows.Forms.MaskedTextBox 
    { 

     public new string Mask 
     { 
      get; 
      private set; 
     } 

     public CustomDateMask() 
     { 
      this.Mask = @"00/00/2\000"; // this property should not be set by any one now 
      this.ValidatingType = typeof(System.DateTime); // this property should not be set by any one now 
     } 
    } 

아무도

답변

1

복사하여 클래스에이를 붙여 넣습니다

[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
public new string Mask { 
    get { return base.Mask; } 
    set { base.Mask = value; } 
} 

에서 [검색 가능한] 속성은 속성 창에서 속성을 숨 깁니다. [EditorBrowsable] 특성은 IntelliSense에서이 특성을 숨 깁니다.

+0

@nobugz : System.ComponentModel을 사용하여 탐색 가능한 –

+0

에도 네임 스페이스를 사용해야합니까? Visual Studio 2008은 자동으로 추가하도록 요청합니다 .... – Greg

3
public class Test : System.Windows.Forms.TextBox 
{ 
    public new string Text 
    { 
     get { return base.Text; } 
     private set { base.Text = value; } 
    } 

    public Test() 
    { 
     base.Text = "hello"; 
    } 
} 


Test test = new Test(); // Create an instance of it 
string text = test.Text; 
text.Text = "hello world"; // comp error 

오류 세부 사항이 속성을 설정할 수 있도록 어떻게해야합니까 :

오류 1 속성 또는 인덱서 ' ScratchPad.Test.Text '는 set 접근자가 액세스 할 수 없으므로이 컨텍스트에서 사용할 수 없습니다. C : \ @Dev \ ScratchPad \ ScratchPad \ ScratchPad \ Form1.cs 33 13 ScratchPad

+1

이것은 : 기본 유형으로 변환하면 쉽게 피할 수 있으며 b : (기본) 마스크를 전혀 반환하지 않습니다. –

+0

@gmcalab : 이렇게 한 후에도 Mask Property를 설정할 수 있습니다. 아직 숨겨져 있지 않다 –

+0

@Shantanu Gupta, 내가 한 일은 잘 모르지만 전체 코드를 보여주기 위해 업데이트한다. 내가 그것을 설정하려고하면 그것은 나를 위해 오류. – Gabe

4

Liskov substitution principal을 깨지 않고 완전히 제거 할 수는 없습니다. 하지만 다시 선언하고 숨길 수 있습니다 (탐색 할 수 없도록 설정하거나 개인을 설정할 수 있음).

하지만 IMO는 나쁜 생각입니다. 컨트롤을 래핑하면 더 깨끗해집니다.

단순히 기본 유형으로 형변환하여 멤버 숨기기를 쉽게 (실현하지 않고) 피할 수 있습니다.

+4

이 날짜 상자는 MaskedTextBox가 아니므로 컨트롤을 감싸는 것이 "올바른 방법"입니다. 그리고 여러분은 cast-as-base-type 문제를 피합니다. –

관련 문제