2013-06-15 2 views
0

기본 컨트롤 (Form1)에 대한 참조를 전달해야하는 사용자 정의 컨트롤 (section1)이 있습니다.양식을 사용자 정의 컨트롤로 전달

Type 'M.section1' does not have a constructor with parameters of types Form.  

The variable 's1' is either undeclared or was never assigned. 

Form1.designer.cs입니다

this.s1 = new M.section1(this); // this is the line that causes the problem 

섹션 1 : 문제는 내가 섹션 1의 생성자에 인수로 양식을 통과 할 때마다, 그것은 디자이너 나누기 내가 오류가 발생합니다. CS 사용자 정의 컨트롤

public partial class section1 : UserControl 
{ 
    private Form1 f { get; set; } 

    public section1(Form1 frm) // constructor 
    { 
     f = frm; 
    } 
} 

내가 고안에서 Form1을하더라도 열 때 이상한 r, 나에게 오류를 제공합니다, 잘 컴파일하고 참조가 실제로 작동하며 사용자 정의 컨트롤에서 Form1에 액세스 할 수 있습니다. 어떤 제안? 감사!

+0

개인 자동 속성이 필요한 이유는 무엇입니까? – SimpleVar

+0

신고서에 "M"이 무엇입니까? – terrybozzio

+1

designer.cs 파일에서이 코드를 얻는 방법은 매우 명확하지 않습니다. 컨트롤에는 매개 변수없는 생성자가 필요합니다. InitializeComponent() 메소드를 절대 수정하지 마십시오. [this answer] (http://stackoverflow.com/a/12072179/17034)에 나와있는 것처럼 부모 참조를 제공하는 코드를 자동 생성하도록 디자이너를 생성 할 수 있습니다. –

답변

1

디자이너는 리플렉션을 사용하여 컨트롤의 인스턴스를 만듭니다. 따라서 기본 생성자가 필요합니다.

public partial class section1 : UserControl 
{ 
    private Form1 f { get; set; } 

    public section1() // designer calls this 
    { 
     InitializeComponent(); //I hope you haven't forgotten this 
    } 

    public section1(Form1 frm) : this() //call default from here : at runtime 
    { 
     f = frm; 
    } 
} 
+0

고맙습니다. 문제가 해결되었습니다! – Kristian

+0

런타임에 전화를 디자인 타임에 통화와 어떻게 다릅니 까? 원래 UserControl을 덮어 쓰시겠습니까? – David

0

난 항상 기본 생성자를 가진 또는 frm 매개 변수에 기본 null 값을 추가하고 사용하는 솔루션 : 당신은 여기 저기 몇 가지 null 검사를 추가해야 할 수도 있습니다

public section1(Form1 frm = null) 
{ 
    f = frm; 
} 

.

+0

고마워, 나는 (기본 생성자를 사용하고 null을 전달) 두 솔루션을 시도하고 솔루션을 재건하지만, 여전히 같은 문제가 발생, 모든 제안? – Kristian

+0

같은 장소에서 똑같은 오류가 있습니까? 나는 이런 경우에, 그것을 재건하기 전에 해결책을 청소하고 싶다. – SimpleVar

+0

프로젝트를 닫고 ".suo"파일 및 bin 폴더를 삭제 한 다음 다시 열고 다시 작성하십시오. –

관련 문제