2014-08-29 10 views
0

한 사용자 정의 컨트롤에서 다른 사용자 정의 컨트롤의 메서드를 호출 할 수 없습니다. 아무 반응이 없습니다. 컨트롤의 control1 및 control2 이름이 있다고 가정 해보십시오.다른 사용자 정의 컨트롤에서 사용자 정의 컨트롤의 메서드를 호출하는 방법?

control1에는 control1에 내 DataGridView를 채우는 InvokeItems() 메서드가 있습니다. control2에는 control1에 InvokeItems() 메서드를 호출하는 버튼이 있습니다.

control1과 control2가 동시에로드됩니다. control1은 내 DataGridView에서 데이터를 올바르게로드하지만 데이터베이스의 데이터를 업데이트하고 control1의 버튼을 클릭하여 세부 정보를 다시로드하지 않습니다. 아무 일도 일어나지 않습니다.

control1의 메서드를 호출하여 레코드 세트의 모든 업데이트를 확인하려고했습니다. 아마도 나는 일어나기를 원했을 것입니다. 그러나 나는 그것을 작동시킬 수 없었다.

하지만 control2에 단추를 넣고 InvokeItems 메서드를 호출하면 데이터베이스의 일부 데이터를 업데이트하더라도 DataGridView가 올바르게로드됩니다.

다음은 내가 한 일입니다. 제어 1에서

가 :

control2에서
Public Sub New() 
    InvokeItems() 
End Sub 

Public Sub InvokeItems() 

    Dim objInvoker As New ClassItems 
    Dim BS As New BindingSource() 

    BS.DataSource = objInvoker.InvokeList 
    GridItems.DataSource = BS 

End Function 

:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim objSM As New control1 
    Call objSM.InvokeItems() 
End Sub 

어떤 제안에 미리 감사드립니다 ..

+0

Populate를 호출하기 위해 단추를 바인딩하는 방법은 무엇입니까? – norekhov

+0

@norekhov 내가 그리드를 채우기 위해 InvokeList 메소드를 가진 ClassItems라는 클래스를 가지고 있음을 잊어 버렸다. P.S. 위의 내 질문을 업데이트했습니다. – Nemesis

답변

0

핸들러를 당신의 Control2에이 Control1로의 새로운 인스턴스를 생성하고,이 그리드가있는 인스턴스가 아닙니다.

Control2에 속성을 만들고 Control1 인스턴스가 생성 된 후에 전달할 수 있습니다.

또는이 이벤트를 두 컨트롤 즉, 해당 컨트롤이있는 폼에 액세스 할 수있는 범위에서 처리하면됩니다.

+0

제안 해 주셔서 감사합니다. 나는 그것을 작업 할 것이고 당신에게 결과에 대한 피드백을 줄 것이다. – Nemesis

관련 문제