2010-04-14 5 views
0

사용자 정의 컨트롤 (사용자 정의 DataGridView 컨트롤)을 만들었습니다. 테두리 스타일을 설정하려면 this MSDN article의 예제를 사용했습니다.usercontrol 문제 BorderStyle

디자이너에서 선택한 테두리 스타일을 볼 수 있습니다. None, FixedSingle 또는 Fixed3D처럼.

하지만 FixedSingle 테두리 스타일을 설정할 때 테두리가 런타임에 나타나지 않습니다. OnPaint 메서드에서 수동으로 그릴 필요가 있습니까?

내가 코드를 디자이너에

private BorderStyle borderStyle = BorderStyle.None; 

     [Browsable (true)] 
     public new BorderStyle BorderStyle 
     { 
     get 
     { 
      return borderStyle; 
     } 

     set 
     { 
      if (borderStyle != value) 
      { 
       if (!Enum.IsDefined(typeof(BorderStyle), value)) 
       { 
        throw new InvalidEnumArgumentException("value", (int)value, typeof(BorderStyle)); 
       } 

       base.BorderStyle = value; 
       UpdateStyles(); 
      } 
     } 
     } 

경계를 다음 사용하지만 크기가 고정되어있는 경우, 격자 크기보다 그 작은. 그리드의 크기를 재조정하고 런타임에 같은 경계선이 나타나더라도 그 크기는 동일하게 유지됩니다.

답변

1

저 KB 기사는 오래되어서 .NET 1.x에 대해 이야기합니다. .NET 2.0에서는 UserControl에 BorderStyle 속성이 있습니다. None, FixedSingle 및 Fixed3D로 설정할 수 있습니다. 고정 싱글 (FixedSingle)은 시도 할 때 잘 동작하며, 문제는 들어 본 적이 없다. CreateParams 재정의를 제거하십시오. 나는 CreateParams을 재정의를 제거하면


using System; 
using System.ComponentModel; 
using System.Windows.Forms; 

class MyDgv : DataGridView { 
    public MyDgv() { 
    base.BorderStyle = BorderStyle.None; 
    } 

    [Browsable(true)] 
    [DefaultValue(BorderStyle.None)] 
    public new BorderStyle BorderStyle { 
    get { return base.BorderStyle; } 
    set { 
     if (base.BorderStyle != value) { 
     base.BorderStyle = value; 
     UpdateStyles(); 
     } 
    } 
    } 

} 
+0

, 국경은 물론 설계시에 적용되지 않습니다. – Ram

+0

그래서 디자이너에서 BorderStyle 속성을 실제로 변경 했습니까? –

+0

아니요, 재정의하지 않았습니다. 시스템 그리드 컨트롤에서 컨트롤을 파생시킵니다. 하지만 페인트로 많은 것을하고 있습니다. – Ram