2013-04-07 3 views
1

저는 응용 프로그램을 작성 중이며 전체 응용 프로그램을 다시 사용할 수있는 일반 검색 양식 (양식 2)을 작성하려고합니다.NON 모달 대화 상자 양식에서 대화 상자 값을 검색하십시오.

검색 양식은 DB를 살펴보고 선택한 항목의 ID 값을 반환합니다.

대화 상자로 양식 (양식 2)을 사용하여이 작업을 수행하고 값을 호출 양식 (양식 1)으로 간단히 반환 할 수 있지만 양식 (양식 2)을 비 모달로 열고 열어두기를 원합니다. 값이 전달 된 후

Form1.SubName(IDValue)을 호출 할 수는 있지만 수동으로 (또는 case 문과 함께) 양식 이름을 지정하고 싶지는 않지만이 단일 검색 양식을 호출하는 폼이 10 개 이상일 수 있습니다.

양식 소유자를 설정하고 Me.Owner.SubName(IDValue) 일을 시도했지만 오류 'SubName' is not a member of 'System.Windows.Forms.Form'가 표시됩니다.

양식 2의 소유자에게 양식 2의 값을 반환하고 호출 양식에서 프로 시저를 호출 할 수있는 방법이 있습니까?

public interface IAsk 
{ 
    void answer(String IDValue); 
} 

이제 검색 창에 당신을 호출 할 때마다 : 먼저 모든 질문 형태 (즉, 납 Styxxy에 대한 THX)를 구현하는 인터페이스를 만들 : 내가 그것을 작동하게하는 방법

+0

올바른 유형으로 전송하십시오 (TryCast 사용). 이 searcher를 시작할 수있는 모든 양식이 구현하는 인터페이스를 사용할 수 있습니다. – Styxxy

+0

'Me.Owner'는 이미 형식 유형입니까? – bendataclear

+0

'System.Windows.Forms.Form'에는 메서드가 없으므로이 메서드가있는 올바른 형식을 얻기 위해 캐스팅해야합니다. – Styxxy

답변

2

를 들어,

SRY을하는 데 도움이, 나는 최선의 해결책이 Events을 사용하는 것입니다 생각합니다. 개념을 보여주기 위해 간단한 예제를 살펴 보겠습니다.

이 예에서는 Parent FormChild Form이 있고 각 양식은 ButtonTextBox입니다.

  1. 상위 폼을 클릭하면 하위 폼이 생성되고 ValueChanged 이벤트에 가입합니다.
  2. 하위 폼을 클릭하면 이벤트가 발생하고 해당 TextBox의 값을 이벤트에 가입 한 모든 사람에게 전달합니다. 여기
    Public Class ParentForm 
    
        Private Sub ParentButton_Click(sender As System.Object, e As System.EventArgs) Handles ParentButton.Click 
         Dim child As New ChildForm 
         AddHandler child.ValueChanged, AddressOf ChildFormValueChanged 
         child.Show() 
        End Sub 
    
        Private Sub ChildFormValueChanged(ByVal NewValue As String) 
         ParentTextBox.Text = NewValue 
        End Sub 
    
    End Class 
    

    Child Form 코드입니다 : 여기

Parent Form 코드입니다

Public Class ChildForm 

    Public Event ValueChanged(ByVal NewValue As String) 

    Private Sub ChildButton_Click(sender As System.Object, e As System.EventArgs) Handles ChildButton.Click 
     RaiseEvent ValueChanged(ChildTextBox.Text) 
    End Sub 

End Class 

AddHandler 코드가 중요하다 - 그것은 또한 Parent Form to subscribe to the Child Form's ValueChanged Event을 허용 할 것 specify a procedure to execute when the event has fired. 이 시나리오에서는 ValueChanged 이벤트가 발생할 때마다 부모 TextBox 값이 Child TextBox 값과 같아지는 것을 볼 수 있습니다 (이 예제에서는 자식 단추를 클릭 할 때 발생합니다).

이벤트 선언 및 데이터 유형 내에 여러 개의 인수를 넣을 수 있지만 발생했을 때 실행되는 프로 시저 (예 : ChildFormValueChanged)가 이벤트와 동일한 서명을 가지면 인수 및 데이터 유형).

+0

이 방법이 구현하기가 쉽습니다. 감사합니다. – bendataclear

+0

@bendataclear 아무 문제 없어, 다행 당신을 위해 일했습니다. – Mash

1

는 나는 이것이 시도 부모님 께 allong을 보내면 대답이 있으니 parent.answer(IDValue) 방법을 부르십시오.

public Form2(IAsk caller) 
{ 
    parent = caller; 
    InitializeComponent(); 
} 

희망이 return a valuecall a procedure on the calling form 모두 귀하의 요구 사항을 기반으로 나쁜 영어