2010-03-18 2 views
2

저는 처음에는 비어있는 ComboBox가 포함 된 간단한 UserControl을 가지고 있습니다. 해당 CB에 대한 설정자는 항목을 항목에 추가하고 getter는 선택한 항목을 반환합니다. 이 UC를 Form에 추가 할 때 디자이너는 비어있는 CB에 대한 getter를 자동으로 호출합니다. 항목으로 CB를 채우는 방법은 나중에 호출됩니다. 코드에서 "어지럼 쳐서"이 문제를 우회하는 한 두 가지 방법을 생각해 볼 수 있습니다. 그러나 시작하기 전에 디자이너가 getter 메서드를 호출하는 것을 막을 수있는 방법이 있는지 물어보고 싶습니다. 아마도 Browsable 또는 Bindable과 비슷한 속성을 가지고 있을까요?디자이너가 getter (VS 2008, WinForms)를 호출하지 못하도록합니다.

답변

1

이 게터가 어떻게 생겼는지는 분명하지 않습니다. 그러나 디자이너가 런타임시에만 사용해야하는 속성을 직렬화하지 않도록해야합니다. 다음 속성을 사용하십시오.

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    [Browsable(false)] 
    public int SomeProperty { 
     //etc... 
    } 
+0

thx ... 그게 내가 찾는거야. 그것은 작동합니다. 디자이너는 더 이상 getter 메서드를 호출하지 않습니다. – LLEA

1

이 시도 들으은 :

public ListBoxItem MyProperty 
{ 
    get 
    { 
     if (this.DesignMode) 
     { 
      return new ListBoxItem("empty"); 
     } 
     else 
     { 
      return comboBox1.SelectedItems[0]; 
     } 
    } 
} 

게터는 여전히 호출됩니다,하지만 당신은 여기에서 반환되는 것을 제어 할 수 있습니다.

또는 나는 게터 위에 [Browsable (false)] 속성을 넣는 것이 효과가있을 것이라고 생각하지만 잘 모르겠습니다.

+0

내 코드가 나쁜 것 같습니다. 나는 CB의 선택된 지표의 변화를 등록하는 사건이있다. 디자이너가 getter를 호출하면 이벤트가 발생하고 선택한 항목을 허용하는 메서드가 예외를 throw합니다 (false 유형). 물론, 제시된 항목이 올바른 유형인지 여부를이 메소드에서 확인할 수 있습니다. 하지만 디자이너에게서 게터를 단순히 숨길 수 있는지 또는 내 요구가 나쁜지에 대해 알고 싶습니다. – LLEA

+0

가끔은 컨트롤을 디자이너에서 정상적으로 작동시키는 것은 어렵지만 폼에 콤보 상자를 사용하는 것은 꽤 정상적이므로이 문제가 발생하는 이유를 정확히 알지 못합니다. 간단한 해결책은 런타임에 콤보 상자에만 변경 이벤트를 첨부하는 것입니다. load 이벤트에서 디자이너에서 해당 이벤트를 선택하고 두 번 클릭하는 대신'cb.onChange + = new EventHandler ... '와 같은 것을 넣을 수 있습니다. 너의 노력을 위해 – MusiGenesis

+0

xx. 나는이 부분을 사용할 수 있었다 .DesignMode. 게다가 당신 말이 맞아. 그 문제를 우회하는 방법은 여러 가지가 있지만 호기심이 많았습니다 ... 이제 대답이 나옵니다. – LLEA

관련 문제