2017-09-28 1 views
-1

저는 userControl을 가지고 있는데, 거기에 버튼이 있습니다. userControl에서 내 메인 폼의 버튼을 클릭 할 때 이벤트를 호출하고 싶습니다. 나는이 작업을 수행 :어떻게하면 usercontrol에서 main form으로 이벤트를 호출 할 수 있습니까?

UserControl을

public UserControlerConstructor() 
{ 
    _button.Click += new EventHandler(OnButtonClicked); 
} 

public delegate void ButtonClickedEventHandler(object sender, EventArgs e); 
public event ButtonClickedEventHandler OnUserControlButtonClicked; 

private void OnButtonClicked(object sender, EventArgs e) 
{ 
    // Delegate the event to the caller 
    if (OnUserControlButtonClicked != null) 
     OnUserControlButtonClicked(this, e); 
} 

양식

public Form1() 
{    
    userControlInstance.OnUserControlButtonClicked += new EventHandler(OnUCButtonClicked); 
} 

private void OnUCButtonClicked(object sender, EventArgs e) 
{ 
    throw new NotImplementedException(); 
} 

내가 형태로 클릭하면 양식 코드에서 아무것도 할 수 없기 때문에 작동하지 않습니다,하지만 UserControl을 코드한다. 하지만 폼 코드로하고 싶습니다. userControl에서 폼으로 이벤트를 호출하는 방법을 모르겠습니다.

+0

질문은 명확하지 않지만 폼 컨트롤에서 사용자 컨트롤 이벤트를 호출하는 것이 좋습니다. 클래스를 소유하고있는 사용자 만 이벤트를 호출 할 수있는시기를 알 수있는 것은 이벤트의 제한 사항입니다. 구독 클래스에는 이벤트 처리기 만 등록 할 수 있습니다. – praty

+0

관련 없음 : 왜 사용자 지정 대리인을 사용하고 있습니까? 당신은 그것을'public event EventHandler OnUserControlButtonClicked'로 만들 수 있습니다. – Fildor

+0

예, 컴파일러는 그것을 멈추지 않습니다. –

답변

0

글쎄 지금 당신은 explicity를 사용하고 싶지 않은가요? 그렇지 않다면 다음을 수행하십시오.

public Form1() 
    {    
     userControlInstance._button.Click += OnUCButtonClicked; 
    } 

private void OnUCButtonClicked(object sender, EventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
0

지금까지는 코드가 컴파일되지 않습니다. 잘못된 이벤트 처리기 유형을 사용하고 있습니다.

1) 클래스 UserControlerConstructor 외부 대리자의 선언을 넣어 :

EventHandler cannot be converted to ButtonClickedEventHandler

다음 단계를 수행하십시오 그것은 다음과 같은 컴파일러 오류 표시해야합니다 다음 변경)

public delegate void ButtonClickedEventHandler(object sender, EventArgs e); 

public partial class UserControlerConstructor: UserControl 
{ 

1을 이벤트를 등록 할 때 핸들러 유형 Form :

public Form1() 
{    
    userControlInstance.OnUserControlButtonClicked += new ButtonClickedEventHandler(OnUCButtonClicked); 
} 

이 방법은 작동해야합니다

관련 문제