2014-12-30 1 views
0

양식의 구성 요소를 반복하려고하지만 구성 요소가 null 인 것으로 보입니다. 그렇다면 양식에서 구성 요소 (조절하지 않음)를 반복하려면 어떻게해야합니까? 당신이 BindingSource 다음과 같은 방법을 작성하는 경우winforms, 구성 요소를 통해 루프

public partial class FormBaseList : Test_app.FormBase 
{ 
    public FormBaseList() 
    { 
     InitializeComponent(); 
    } 


public partial class FormBaseDetail : Test_app.FormBase 
{ 
    public FormBaseDetail():base() 
    { 
     InitializeComponent(); 
     gttDataGridView1.AutoGenerateColumns = false; 
    } 
+0

_gttDataTable_ 요소의 선언 및 초기화를 표시 할 수 있습니까? – Steve

+0

'this.components'는 선언없이 컴파일되지 않습니다. 코드를 확인하거나이 인스턴스를 설정하는 방식을 붙여 넣으십시오. –

+0

코드를 편집하여 바인딩 소스를 사용하므로 사람들이 검색중인 구성 요소의 선언에 대해 묻지 않습니다. 선언이 무엇인지는 중요하지 않습니다. 중요한 것은 this.components가 null이라는 것입니다. – GuidoG

답변

2

을 요청한

public partial class FormBase : Form 
{ 
    public FormBase() 
    { 
     InitializeComponent(); 
     FixVisualDesignerIssues(); 
    } 

    protected void FixVisualDesignerIssues() 
    { 
     // this.components is always NULL ???????? 
     foreach (var comp in this.components.Components.OfType<BindingSource>()) 
     { 
      ((BindingSource)comp).do something, whatever 
     } 
    } 

편집 만 그것은 구성 요소 컨테이너에 포함됩니다. 당신이 바인딩 소스를 만들 수있는 다른 방법을 사용하는 경우

BindingSource bindingSource1 = new BindingSource(components); 

components 용기에 아무것도 없습니다.

+0

bindingsource 디자이너에서 양식에 그것을 삭제하여 만들어집니다. 그래서 designer.cs가 어떻게 만들어 졌는지 확인해야 할 것입니다. – GuidoG

+0

이 문제는 다른 양식이 상속하는 기본 양식이 있습니다. 기본 폼에는 구성 요소가 없지만 상속 된 폼에 의해 배치되는 모든 구성 요소를 반복하기 위해 기본 폼을 사용하려고했습니다. 상속 된 형식은 결국 InitialiseComponents를 호출 할 것이므로 그 시점에 모든 구성 요소를 찾을 수 있어야합니다. 이것은 델파이에서 어떻게했는지, C#으로 어떻게 할 수 있습니까? – GuidoG

+0

양식 구조를 보여주는 코드를 공유해주십시오. 구성 요소 컬렉션과 바인딩 소스는 모두 개인 객체입니다. – danish

관련 문제