ssouf

폼에 메뉴 본문

Window DEV

폼에 메뉴

황금니 2009. 10. 12. 10:29

폼에 메뉴 추가

Windows Forms에서는 메뉴 및 상황에 맞는 메뉴를 지원합니다. 주 메뉴는 폼의 제목 표시줄 바로 아래에 있는 메뉴 모음에 표시됩니다. 메뉴 모음에는 관련 하위 메뉴 항목을 그룹화하는 상위 메뉴 항목이 들어 있습니다. 예를 들어, 상위 메뉴 항목인 파일을 클릭하면 파일 작업과 관련된 메뉴 항목을 표시할 수 있습니다. 일반적으로 메뉴 항목은 새로 만들기, 열기 등의 응용 프로그램 명령이지만, 구분선 및 하위 메뉴 항목도 있습니다. 메뉴 항목 옆에 확인 표시를 사용하면 응용 프로그램의 명령 또는 기능 상태를 나타낼 수 있습니다. Windows Forms에서는 MainMenu 컨트롤이 주 메뉴를 나타냅니다.

폼에 있는 특정 컨트롤이나 영역에 대해 상황에 맞는 메뉴를 표시할 수 있습니다. 상황에 맞는 메뉴는 대개 마우스 오른쪽 단추를 클릭하여 액세스합니다. Windows Forms에서는 ContextMenu 컨트롤이 상황에 맞는 메뉴를 나타냅니다.

ContextMenuMainMenuMenu에서 파생되며, 속성, 메서드 및 이벤트를 대부분 공유합니다.

폼에 MainMenu 추가

다음 코드에서는 폼에 MainMenu를 추가하는 방법을 보여 줍니다.

MainMenu mainMenu = new MainMenu();
this.Menu = mainMenu;
C#

컨트롤에 상황에 맞는 메뉴 추가

다음 코드에서는 ContextMenu를 만들어 컨트롤에 할당하는 방법을 보여 줍니다.

ContextMenu label1ContextMenu = new ContextMenu();
Label label1 = new Label();
label1.ContextMenu = label1ContextMenu;
C#

메뉴 항목 추가

다음 예제에서는 File 메뉴 항목이 MainMenu에 추가됩니다. File 메뉴 항목에는 하위 메뉴인 OpenExit가 들어 있습니다.

//Add File Menu
MenuItem miFile = mainMenu.MenuItems.Add("&File");
miFile.MenuItems.Add(new MenuItem("&Open..."));
miFile.MenuItems.Add("-"); // Gives us a seperator
miFile.MenuItems.Add(new MenuItem("E&xit"));
C#


다음 코드에서는 앞의 코드 예제에서 만든 OpenExit 메뉴 항목에 대한 Click 이벤트를 처리하는 방법을 보여 줍니다.

....
//Add File Menu
MenuItem miFile = mainMenu.MenuItems.Add("&File");
miFile.MenuItems.Add(new MenuItem("&Open...", new EventHandler(this.FileOpen_Clicked), Shortcut.CtrlO));
miFile.MenuItems.Add("-"); // Gives us a seperator
miFile.MenuItems.Add(new MenuItem("E&xit", new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));
....

//File->Exit Menu item handler
private void FileExit_Clicked(object sender, System.EventArgs e) {
this.Close();
}

//File->Open Menu item handler
private void FileOpen_Clicked(object sender, System.EventArgs e) {
MessageBox.Show("And why would this open a file?");
}

....
C#


다음 예제에서는 앞의 예제에서 만든 메뉴 항목에 대해 바로 가기 키를 정의하는 방법을 보여 줍니다.

....
//Add File Menu
MenuItem miFile = mainMenu.MenuItems.Add("&File");

miFile.MenuItems.Add(new MenuItem("&Open...",
new EventHandler(this.FileOpen_Clicked), Shortcut.CtrlO));

miFile.MenuItems.Add("-"); // Gives us a seperator

miFile.MenuItems.Add(new MenuItem("E&xit",
new EventHandler(this.FileExit_Clicked), Shortcut.CtrlX));
....
C#

하위 메뉴 추가

다음 예제에서는 하위 메뉴를 만드는 방법을 보여 줍니다.

//Add Format Menu
MenuItem miFormat = mainMenu.MenuItems.Add("F&ormat");

//Font Face sub-menu
mmiSansSerif = new MenuItem("&1. " + sansSerifFontFamily.Name, new EventHandler(this.FormatFont_Clicked));
mmiSerif = new MenuItem("&2. " + serifFontFamily.Name, new EventHandler(this.FormatFont_Clicked));
mmiMonoSpace = new MenuItem("&3. " + monoSpaceFontFamily.Name, new EventHandler(this.FormatFont_Clicked));

miFormat.MenuItems.Add( "Font &Face",
(new MenuItem[]{ mmiSansSerif, mmiSerif, mmiMonoSpace })
);

//Font Size sub-menu
MenuItem miSmall = new MenuItem("&Small", new EventHandler(this.FormatSize_Clicked));
MenuItem miMedium = new MenuItem("&Medium", new EventHandler(this.FormatSize_Clicked));
MenuItem miLarge = new MenuItem("&Large", new EventHandler(this.FormatSize_Clicked));

miFormat.MenuItems.Add( "Font &Size"
, new EventHandler(this.FormatSize_Clicked)
, (new MenuItem[]{ miSmall, miMedium, miLarge }));
C#


기본 메뉴 항목 추가

다음 예제에서는 기본 메뉴 항목을 지정하는 방법을 보여 줍니다.

//Add Format Menu
mmiSansSerif = new MenuItem("&1. " + sansSerifFontFamily.Name, new EventHandler(this.FormatFont_Clicked));
mmiSansSerif.DefaultItem = true ;
C#


메뉴 항목에 확인 표시 추가

다음 예제에서는 메뉴 항목 옆에 확인 표시를 나타내는 방법을 보여 줍니다. 또한 확인 표시가 된 항목을 추적하는 방법도 보여 줍니다.

//Add Format Menu
MenuItem miMedium = new MenuItem("&Medium", new EventHandler(this.FormatSize_Clicked));
miMedium.Checked = true;

....


private void FormatSize_Clicked(object sender, System.EventArgs e) {
MenuItem miClicked = (MenuItem)sender;

// Uncheck old selection
miMainFormatSizeChecked.Checked = false;

//Do Menu item action and make a new selection
....
miMainFormatSizeChecked = miSmall;
....

// Check the new selection
miMainFormatSizeChecked.Checked = true;
}
C#


메뉴 복제

주 메뉴의 하위 집합이 특정 컨트롤에 대한 상황에 맞는 메뉴인 경우가 많습니다. 여러 개의 메뉴에 동일한 메뉴 항목을 추가할 수는 없지만 메뉴 항목 또는 메뉴 항목 집합을 복제할 수는 있습니다. 다음 코드에서는 앞에서 만든 Format 메뉴를 복제하여 Label의 상황에 맞는 메뉴에 추가하는 방법을 보여 줍니다.

//Add Format to label context menu
//Note have to add a clone because menus can't belong to 2 parents

label1ContextMenu.MenuItems.Add(miFormat.CloneMenu());
C#


메뉴 병합

MDI 응용 프로그램에서 각 MDI 자식 폼의 주 메뉴는 MDI 부모 폼의 주 메뉴에 병합됩니다. 메뉴 병합 예제는 MDI 퀵 스타트를 참조하십시오.


'Window DEV' 카테고리의 다른 글

윈도우 dns 업데이트  (0) 2016.12.01