2013-06-26 6 views
1

내 WinForms 응용 프로그램에 대한 사용자 지정 구성 요소를 만들고 있습니다. 새로 만들기, 열기, 저장 및 다른 이름으로 저장과 같은 파일 명령을 처리합니다.사용자 지정 구성 요소의 주 메뉴 후크

나는 이것을하기 전에 이것을 어떻게했으면 좋겠는지 확실히 알았다. 하지만 구성 요소가 자동으로 관련 명령을 기본 양식에 연결하게하는 방법이 있는지 궁금합니다. 또는 어쩌면 동적으로 명령을 기본 양식에 추가 할 수도 있습니다. 이렇게하면이 구성 요소를 사용하는 각 응용 프로그램에서 해당 명령을 연결해야하는 번거 로움을 덜어줍니다.

더 나은 방법이 있다면 구성 요소를 사용하지 않습니다. 기본적으로 공통 대화 상자와 같은 다른 구성 요소에 액세스하는 클래스입니다.

모든 정보 주셔서 감사합니다.

+1

우리가하는 일은 사용자 지정 구성 요소에 인터페이스를 구현하는 것입니다. 'IHASFileActions'라고 말하십시오. 그런 다음 컨트롤이 기본 폼에로드 될 때 IHasFileActions를 구현하면 버튼 명령을 올바르게 전파 할 수 있습니다. – nakiya

+0

이것은 나에게 명확하지 않습니다. 어떤 객체가'IHasFileActions'를 구현합니까? 어떤 객체가 버튼 명령을 전달합니까? 양식 또는 구성 요소? 구성 요소가이 작업을 수행하기를 원합니다. –

+0

사용자 정의 컴포넌트는 'IHasFileActions'를 구현합니다. 양식은 작업을 전파합니다. (이벤트는 어쨌든 형식으로 캡처됩니다.). 메인 폼에서 코드를 줄이려면 여기에 옵저버 패턴을 구현할 수 있습니다. – nakiya

답변

0

나는 이것을 할 수있는 매끄러운 방법을 찾을 수 없었습니다.

양식을 호출해야하는 구성 요소에 메서드를 추가하기 만하면 모든 메뉴 명령이 추가되고 구성 요소의 자체 처리기가 연결됩니다. 이 메소드는 하나의 인수, 즉 명령을 추가해야하는 ToolStripMenuItem의 인스턴스를 취합니다.

public void CreateMenuCommands(ToolStripMenuItem menuItem) 
{ 
    menuItem.DropDownItems.Insert(0, new ToolStripMenuItem("&New", null, MenuNew_Click, Keys.Control|Keys.N)); 
    menuItem.DropDownItems.Insert(1, new ToolStripMenuItem("&Open...", null, MenuOpen_Click, Keys.Control | Keys.O)); 
    menuItem.DropDownItems.Insert(2, new ToolStripMenuItem("&Save", null, MenuSave_Click, Keys.Control | Keys.S)); 
    menuItem.DropDownItems.Insert(3, new ToolStripMenuItem("Save &As...", null, MenuSaveAs_Click)); 
} 

양식의 수동 단계가 필요하지만이 단일 메서드를 호출하는 것은 간단합니다.

관련 문제