2011-04-08 2 views
0

위임 등의 양식을 선언 버튼을 사용하여 UIForm1과 2를 시작할 수 있습니다. 또한 DebugForm이라는 또 다른 폼이 있는데 거기에 textBox가 있고 UIForm1과 2를 사용하여 모든 오류가 발생합니다. 그것을 제외하고 (예외 등).내가 내 프로그램에서 4 개 형태가

아니요 UIForm1과 2가 모두 액세스 할 수 있도록 StartForm에서 DebugForm을 선언하고 싶습니다. 내가 어떻게 해? 공개로 선언했지만 액세스 할 수 없습니다.

//in StartForm 
public DebugForm dFrm = new DebugForm(); //Not working 

//in UIForm1 or 2 
//add a error to textbox 
dFrm.textBox.Text += "ERROR NUMBER 1"; //Not working 
dFrm.Show(); //Not working 

나는 대리자 키워드로 어떻게 든해야한다고 생각합니다. 어떻게 그렇게 할 수 있을까요?

//in StartForm 
public static DebugForm dFrm = new DebugForm(); 

등 다른 형태로 사용 :

StartForm.dFrm.textBox.Text += "ERROR NUMBER 1"; 
StartForm.dFrm.Show(); 
+0

같은 풀러 코드 예제를 기입하십시오 할 (우리가 모르는 이 코드가 모두 메소드에 있는지 등) "Not working"보다 자세한 정보를 제공합니다. 컴파일러 오류 메시지가 도움이 될 것입니다 ... –

답변

1

퀵 수정으로 StartForm에 DebugForm 변수를 선언하는 것 메서드이므로 할당 된 함수 또는 여러 메서드를 나타냅니다. 객체를 나타내는 데 사용할 수 없습니다.

왜 문자열 개체 (List)가 포함 된 컬렉션을 만든 다음 디버그 양식을 만들 때 텍스트 상자에서이를 비울 수 있습니다.

메인 폼에 컬렉션을 만들고 UI1 & 2 개의 폼에 전달합니다. 그런 다음 DebugForm을 생성하면 거기에 전달하여 원하는대로 할 수 있습니다.

이 컬렉션을 지정할 수있는 각 양식에서 속성을 만들 수 있습니다.

0

대리자에 "포인터"입니다

0

StartForm 그게 전부의 공용 속성은 그럼 당신은 실제로 UIForms1, 2 StartForm를 노출하지 않고 StartForm.DebugForm

startForm.DebugForm.Show(); 
startForm.DebugForm.TextBox.Text += "Error"; 
1

을 통해이 작업을 수행하는 깨끗한 방법을 DebugForm에 액세스 할 수 있습니다 DebugForm

public class MainForm 
{ 
    private DebugForm debugForm = new DebugForm(); 

    public DebugForm DebugForm 
    { 
     get { return this.debugForm; } 
    }   
} 

에 대한 액세스를 제공합니다 선언 UIForm1과 2의 생성자를 변경하여 조치를 취하는 것입니다.

private Action<string> _showDebugForm; 
public UIForm1(Action<string> showDebugForm) 
{ 
_showDebugForm = showDebugForm 
} 

및 전화

UIForm1

에서

if(_showDebugForm!=null) 
{ 
    _showDebugForm("ERROR NUMBER 1"); 
} 

그리고 당신은 UIForm1를 만들 때, 2는이

new UIForm1(str => 
{ 
    dFrm.textBox.Text += str; 
    dFrm.Show(); 
}); 
+0

고마워,이 또한 좋은 것입니다. –

관련 문제