2010-07-02 7 views
7

나는 코드가 정의 때문에 이벤트의 방법이 될 수 없다 'XXX'이 (가) 있습니다. 예를 들어, 기본 클래스 'Layout'에서 파생 된 'Layout1'이 있습니다. Layout1의 요소는 Display01입니다. Display01에는 DisplayClicked 이벤트가 있습니다. Visual Studio Designer를 통해 DisplayX_DisplayClicked를 Display01의 DisplayClicked 이벤트에 할당하려고합니다. 이 클래스는 이미에서 파생되는 클래스는 방법을 정의하기 때문에방법은이 클래스가 이미에서 파생되는 클래스는 방법

이 방법은 'xxx는'

이벤트 방법이 될 수 없습니다 : 그것은 나에게 오류를 제공

public partial class Layout1 : Layout 
{ 
    private CameraPanel Display01; 
} 

.

기본 클래스의 메서드를 파생 클래스의 이벤트 핸들러로 사용하는 방법은 무엇입니까? 가능한가? 그렇다면, 어떻게. 그렇지 않다면, 왜.

+0

전혀 수정하지 않았습니다. 정확히 * 입력 할 내용은 무엇입니까? –

+0

@ 한스, 재현 할 수 없습니까? OK, 단계별. 1. 새 기본 클래스 레이아웃 : UserControl을 추가합니다. 2. 빈 본문을 가진 DisplayX_DisplayClicked (개체 보낸 사람, DisplayEventArgs e) 메서드를 기본 클래스에 추가합니다. 3. 파생 클래스 Layout1 : Layout을 추가합니다. 4. Layout1에 컨트롤을 추가합니다 (예 : CameraPanel Display01). Display01에 DisplayClicked 이벤트가 있습니다. Visual Studio Designer를 통해 Display01.DisplayClicked에 이벤트 핸들러를 추가하고 싶습니다. 그 목표를 위해 기본 클래스의 메서드를 사용하고 싶습니다. 그러나 디자이너는 그것을 부정합니다. ___ 비주얼 스튜디오 디자이너를 통해 이벤트 핸들러를 추가하고 싶습니다. – nik

+0

입력 한 내용을 말하지 않았습니다. –

답변

9

디자이너가이를 처리 할 수는 없지만 코드에서 올바르게 처리 할 수 ​​있습니다. 배치 1의 생성자에서, 단지 쓰기 :

public Layout1() 
{ 
    InitializeComponent(); 
    this.Display01.DisplayClicked += base.DisplayX_DisplayClicked; 
} 

또는, 당신은 그것을 구현 한 후 디자이너가 Display01_DisplayClicked라는 방법을 생성하게하고, 수 등 :

private void Display01_DisplayClicked(object sender, DisplayEventArgs e) 
{ 
    base.DisplayX_DisplayClicked(sender, e); 
} 
더 많은 자세한입니다

, 그래서 첫 번째 방법이지만, 디자이너가 해당 이벤트의 핸들러가 있음을 알 수 있습니다.

+0

Visual Studio Designer에서 기본 클래스 메서드를 사용할 수없는 이유는 무엇입니까? – nik

+0

디자이너가 현재 클래스에서만 검색하기 때문입니다. – serhio

+0

나는 당신의 솔루션을 base.xxx와 함께 사용할 것이다. 그러나 비주얼 스튜디오 디자이너에서이 핸들러를 볼 수 없기 때문에별로 좋지 않다. 다른 프로그래머가 visual studio에서 usercontrol을 보게되면 desinger => 아무 것도 볼 수 없게됩니다. @serhio, 나쁜 studia. 그러나 다른 한편으로는 디자이너가 전체 계층 구조를보아야 하는가? 어쩌면해야하고, 어쩌면해서는 안됩니다 ... – nik

2

디자이너는 편집중인 클래스의 메서드 만 찾습니다. 이 문제를 해결하려면 하위 클래스의 메서드를 덮어 쓰고 기본 메서드를 호출하면됩니다. 그것은 디자이너에서 잘 작동합니다.

protected override void DisplayX_DisplayClicked(object sender, DisplayEventArgs e) 
    { 
     base.DisplayX_DisplayClicked(sender, e); 
    } 
관련 문제