2011-09-07 5 views
0

나는이 VS2010 궁극에 다음 코드 : 나는 예제 윈폼 응용 프로그램을 실행할 때값은 윈폼 건설 중에 두 번 추가

class MyComboBox : System.Windows.Forms.ComboBox 
{ 
    public MyComboBox() { 
     this.Items.Add("myValue"); 
     this.Items.Add("myValue2"); 
     this.Items.Add("myValue3"); 
     this.Items.Add("myValueN"); 
    } 
    // ... 
} 

는 컨트롤의 모든 인스턴스 드롭 다운 목록에서 두 번 "myValue을"(이 제 마지막). 왜 이런 일이 일어나고 어떻게 수정합니까?

+0

항목 목록에 내 값이 기본값으로 있습니까? 즉 당신은 그것을 디자이너에 넣었습니까? – kmcc049

답변

2

이것은 생성자가 디자인 타임에 실행되기 때문에 발생합니다. 따라서 사용자 지정 콤보 박스를 양식에 놓으면 즉시 4 개의 값으로 채워집니다. 그런 다음 폼의 InitializeComponent() 메서드에서 유지됩니다. 다음에 폼을 실행하면 생성자가 다시 실행되어 콤보 상자에 4 개의 값이 추가 된 다음 InitializeComponent가 4를 더 추가합니다.

여러 가지 방법으로 문제를 해결할 수 있지만 깨끗한 방법은 상당히 고통 스럽습니다.

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[Browsable(false)] 
public new ObjectCollection Items { 
    get { return base.Items; } 
} 
: 드롭의 항목을 편집 할 수없는 것은 다음이 가장 좋은 수정이 괜찮 경우

class MyComboBox : ComboBox { 
    protected override void OnHandleCreated(EventArgs e) { 
     base.OnHandleCreated(e); 
     if (this.Items.Count == 0) { 
      this.Items.Add("myValue"); 
      this.Items.Add("myValue2"); 
      this.Items.Add("myValue3"); 
      this.Items.Add("myValueN"); 
     } 
    } 
} 

: 지금까지 가장 간단한 방법은 당신이 디자인 타임 속성을 테스트 할 수있을 때까지 이러한 항목을 추가 지연하는 것입니다