11. 기타 [WinForms] 컨텍스트 메뉴 추가하기
페이지 정보
작성자 GCK써니 작성일 2022-06-24 17:10 조회 917회 댓글 0건본문
관련링크
컨텍스트 메뉴는 바로가기 메뉴라고도 불리우며, 적절한 컨텍스트 메뉴는 응용프로그램의 사용성과 업무 효율성을 높여줍니다.
Spread.NET 에서도 사용자가 자주 사용하는 메뉴들로 구성된 컨텍스트 메뉴를 생성하여 사용할 수 있습니다.
직접 컨텍스트 메뉴를 생성하고, FpSpread의 ContextMenu 속성에 추가한 후,
FpSpread 위에서 마우스 우클릭하면, 컨텍스트 메뉴 항목들을 자동으로 보여줍니다.
아래 이미지는, Spread Designer에서 제공하는 컨텍스트 메뉴입니다.
본문에서는 Spread Designer에서 제공하는 컨텍스트 메뉴 일부를 응용프로그램 최종 사용자가 사용할 수 있도록 스프레드에 추가하는 방법을 살펴 보겠습니다.
새 프로젝트 생성
FpSpread 컴포넌트 추가
도구상자에서 FpSpread 컴포넌트를 찾아, Form으로 가져옵니다.
1. 디자인 모드에서 F7 키를 눌러, Form1.cs 파일로 이동하여 코드를 살펴 봅니다.
2. 아래 코드를 사용하여, ContextMenu 객체를 생성합니다.
ContextMenu custommenu = new ContextMenu();
custommenu.MenuItems.Add("잘라내기", new EventHandler(Context_Cut)); custommenu.MenuItems.Add("복사", new EventHandler(Context_Copy)); custommenu.MenuItems.Add("붙여넣기", new EventHandler(Context_Paste)); custommenu.MenuItems.Add("삽입", new EventHandler(Context_Insert)); custommenu.MenuItems.Add("내용 지우기", new EventHandler(Context_ClearSelectedCellsData)); custommenu.MenuItems.Add("셀 서식", new EventHandler(Context_FormatCells));
만일 아래 이미지와 같이 특정 메뉴 항목에 하위 메뉴를 추가하고 싶은 경우, 하기 샘플 코드와 같이 해당 메뉴 항목 인덱스에 서브 메뉴 항목을 추가하실 수 있습니다.
custommenu.MenuItems.Add("붙여넣기", new EventHandler(Context_Paste)); custommenu.MenuItems[2].MenuItems.Add("모든 셀 정보", new EventHandler(Context_PasteAll)); custommenu.MenuItems[2].MenuItems.Add("수식", new EventHandler(Context_PasteFormulas));
custommenu.MenuItems.Add("-");
(옵션) 메뉴 선택키 추가
컨텍스트 메뉴가 보여졌을 때, 특정 항목을 선택하는 키를 설정할 수 있습니다.
메뉴 항목에 대한 캡션을 지정할 때, 선택키로 사용할 문자 앞에 '&' 문자를 입력합니다.
만약 아래와 같이 "잘라내기" 메뉴의 캡션을 지정할 때 'C' 앞에 '&' 문자를 붙여 쓴다고 가정합니다.
custommenu.MenuItems.Add("잘라내기(&C)", new EventHandler(Context_Cut));
그 결과, 셀을 우클릭하여 컨텍스트 메뉴가 보여진 상태에서, 키보드의 'C' 키를 누르면 "잘라내기" 메뉴가 선택됩니다.
관련 내용은 아래 링크된 MS .NET 도움말 문서에서도 확인하실 수 있습니다.
메뉴 클릭 시 발생하는 이벤트 정의
각 메뉴를 클릭했을 때, 발생하는 이벤트를 정의합니다.
하기 샘플 코드는 "잘라내기" 메뉴를 선택했을 때 발생하는 이벤트를 정의한 것입니다. "잘라내기" 메뉴를 클릭하면, FpSpread의 ActionMap에 미리 정의된 ClipboardCut 동작을 현재 활성화 된 SheetView에서 수행합니다.
private void Context_Cut(object sender, EventArgs e) { fpSpread1.GetActionMap().Get(FarPoint.Win.Spread.SpreadActions.ClipboardCut).PerformAction(fpSpread1.GetRootWorkbook().GetActiveWorkbook()); }
나머지 메뉴들을 선택했을 때 발생하는 이벤트도 아래와 같이 정의합니다.
private void Context_Copy(object sender, EventArgs e) { fpSpread1.GetActionMap().Get(FarPoint.Win.Spread.SpreadActions.ClipboardCopy).PerformAction(fpSpread1.GetRootWorkbook().GetActiveWorkbook()); } private void Context_Paste(object sender, EventArgs e) { fpSpread1.GetActionMap().Get(FarPoint.Win.Spread.SpreadActions.ClipboardPaste).PerformAction(fpSpread1.GetRootWorkbook().GetActiveWorkbook()); } private void Context_Insert(object sender, EventArgs e) { fpSpread1.GetActionMap().Get(FarPoint.Win.Spread.SpreadActions.ClipboardInsert).PerformAction(fpSpread1.GetRootWorkbook().GetActiveWorkbook()); } private void Context_ClearSelectedCellsData(object sender, EventArgs e) { fpSpread1.GetActionMap().Get(FarPoint.Win.Spread.SpreadActions.ClearSelectedCellsData).PerformAction(fpSpread1.GetRootWorkbook().GetActiveWorkbook()); } private void Context_FormatCells(object sender, EventArgs e) { fpSpread1.GetActionMap().Get(FarPoint.Win.Spread.SpreadActions.ShowFormatCellsDialog).PerformAction(fpSpread1.GetRootWorkbook().GetActiveWorkbook()); }
이외에도 ActionMap에 정의된 SpreadActions의 필드 목록은 하기 링크된 도움말 문서에서 확인하실 수 있습니다.
fpSpread1.ContextMenu = custommenu;
지금 바로 Spread.NET을 다운로드하여 직접 테스트해보세요!
댓글목록
등록된 댓글이 없습니다.