2013-05-19 3 views
3

전달 된 매개 변수를 기반으로 폼을 여는 표준 메서드를 만들려고합니다. 기본적으로이 완료하세요 :매개 변수로 이름을 전달하면 메서드에서 폼을 엽니 다.

Quotes with a passed parameter, e.g. FormToOpen. 

이 전혀 가능 :

using (Quotes newQte = new Quotes()) 
{ 
    newQte.ShowDialog(); 
} 

대체하여?

+0

을 의미합니까 (면책 조항 모든 오류가 간결을 위해 생략 확인) FormToOpen_? –

+0

열리는 양식의 이름을 포함하는 매개 변수 또는 해당 매개 변수에 대한 (적절한) 참조를 의미합니다. – PeterJ

+0

''FormToOpen "'과 같은 문자열을 전달하고 싶습니까 (''=> new FormToOpen()'와 같은'Func' 델리게이트의 인스턴스를 전달하고 싶습니까? –

답변

4

이렇게하려면 "Factory Method"을 사용할 수 있습니다.

당신은 (나는 명확성을 위해 createForm()로 이름을 변경하고있어)이 같은 FormToOpen를 정의하는 것입니다 :

private void MakeAndDisplayForm(Func<Form> createForm) 
{ 
    using (var form = createForm()) 
    { 
     form.ShowDialog(); 
    } 
} 

당신은 다음과 같이 호출합니다 :

Func<Form> createForm; 

그래서 코드는 다음과 같을 것 이 :

MakeAndDisplayForm(() => new MyForm()); 

여기서 MyForm은 형식 t 유형입니다. 모자를 MakeAndDisplayForm() 만들어야합니다.

이런 종류의 일을하는 것이 일반적입니다. 종종 생성자 함수를 클래스의 생성자에 전달합니다. 그런 다음 해당 클래스는 나중에 작성자 함수를 사용하여 작성 방법을 모른 채 사용할 수있는 항목을 작성합니다.

이것은 Depencency Injection의 형식입니다.

: 당신이 전달 된 매개 변수, 예를 들어, 함께 지수를 _replacing 무엇을

+0

화려한! 매우 감사합니다. 이것은 내가 필요한 것입니다. 매튜 너 내 영웅이야! – PeterJ

2

매개 변수에 따라 표시 할 양식을 작성하는 방법을 만들기 : Quotes, CitationsReferencesForm에서 파생 된 양식 클래스가 될 것

public static Form CreateAppropriateForm(int formToOpen) 
{ 
    switch (formToOpen) { 
     case 0: 
      return new Quotes(); 
     case 1: 
      return new Citations(); 
     case 2: 
      return new References(); 
     default: 
      throw new ArgumentException("Invalid parameter value."); 
    } 
} 

.

그런 다음 폼 표시 할 때 해당 메소드를 호출 할 수 있습니다 :

using (Form form = CreateAppropriateForm(2)) { 
    form.ShowDialog(); 
} 
다음

2의 예를 함께 표시를 -하지만 당신을 위해 사용할 수있는 값을 산출 다른 표현을 삽입 무료입니다 거기에 양식 선택 방법.

물론 응용 프로그램에 적합한 경우 formToOpen을 더 의미있는 방법으로 선언 할 수도 있습니다. 예를 들어 사용자 정의 enum 유형으로 선언 할 수 있습니다. 여기서 각 enum 값은 특정 양식을 나타냅니다.

+0

귀중한 의견을 보내 주셔서 대단히 감사드립니다! – PeterJ

관련 문제