2010-12-16 3 views
0

런타임에 동적으로 작성된 사용자 정의 컨트롤에 대해 목록 상자에 액세스하여 항목을 추가하려고합니다. 사용자 지정 컨트롤에서 단추 위치를 누르면 항목을 추가하려고하지만 작동하지 않습니다. 나는에있는 버튼을 형성를 사용할 때사용자 정의 컨트롤에서 폼의 컨트롤에 액세스

public string ABC 
    { 
     set { listBox1.Items.Add (value); } 
    } 

위의 문자열이 잘 작동 :

'ABC'
private void button1_Click(object sender, EventArgs e) 
    { 
     Form1 frm = new Form1(); 
     frm.ABC = "HI"; 
    } 

양식의 예에 공공 문자열입니다 : 나는이 작동하려면 다음 코드를 사용하여이 양식 및 lsitbox 값을 추가하지만 사용자 지정 컨트롤의 단추를 사용하여 '값'텍스트를 변경할 때 사용하지만 목록 상자에 항목을 추가하지 않습니다. 나는 또한 tabel 시도하지만 도움이되지 않습니다. ListBox1의 Modifires를 Private에서 Public으로 변경하지만 작동하지 않습니다. 위의 함수는 양식에서 제대로 작동하지만 사용자 정의 컨트롤에서 작동하지 않습니다.

감사합니다.

답변

-1

가장 쉬운 방법은 양식을 사용자 지정 컨트롤에서 사용자 지정 컨트롤에 액세스 할 수 있도록 생성자의 매개 변수로 사용자 지정 컨트롤에 전달하는 것입니다.

EX :

public class CustomControl 
{ 
    private Form1 _form; 

    public CustomControl(Form1 form) 
    { 
     _form = form; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _form.ABC = "HI"; 
    } 
} 
+0

쉽지 만 진절머리 나. 이벤트는 갈 길이 멀다. –

+0

하이 타일러. 내가 당신의 방법을 사용하면 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"라는 오류가 표시됩니다. –

-1

내가 생각하는 당신이 사용해야은 귀하의 경우

this.ParentForm 

그래서입니다 그것이 있어야 :

public string ABC 
{ 
    set { this.ParentForm.listBox1.Items.Add (value); } 
} 
1

는 ("ItemAdded"이벤트를 노출하거나 당신의 주요 폼이 처리 할 수있는 자식 폼에 무엇이든). EventArgs 파생 개체를 통해 이벤트 구독자에게 데이터를 전달합니다. 이제 메인 폼은 UI를 업데이트 할 수 있습니다. 두 클래스 간의 밀접한 결합이 없기 때문입니다. 한 클래스는 다른 UI 레이아웃에 관해서는 알지 못합니다.이 습관이 들어 맞으면 나쁜 습관이 생깁니다.

관련 문제