[C#] 모든 메뉴와 서브메뉴를 보이도록 하는 방법 예제

C#에서 일부 메뉴를 숨겨 놓았는데, '디버깅' 또는 '관리자'인 경우에 모든 메뉴를 보이도록 하는 경우가 있을 것입니다. 특히 MenuStrip 컨트롤을 사용해 다양한 메뉴를 다루다 보면, 계층 구조를 가진 메뉴에서 '모든 항목을 한 번에 표시'하고 싶을 때가 있을 거예요. 이를 해결하기 위한 예제 코드입니다.

모든 메뉴 보이도록 하는 방법

아래는 MenuStrip의 모든 메뉴와 서브메뉴를 한 번에 표시할 수 있는 재귀 호출 방식의 코드입니다.

// MenuStrip의 모든 항목을 표시하도록 설정하는 코드
private void SetVisibleTrueAll()
{
    foreach (ToolStripMenuItem menu in menuStrip.Items)
    {
        SetVisibleTrue(menu);
    }
}

private void SetVisibleTrue(ToolStripMenuItem menuItem)
{
    menuItem.Visible = true;

    foreach (ToolStripItem subItem in menuItem.DropDownItems)
    {
        if (subItem is ToolStripMenuItem subMenuItem)
        {
            SetVisibleTrue(subMenuItem); // 재귀 호출로 서브 메뉴 처리
        }
        else
        {
            subItem.Visible = true; // 일반 항목 처리
        }
    }
}

코드의 작동 방식과 구현 원리

  1. SetVisibleTrueAll 메서드
    최상위 MenuStrip의 모든 메뉴 항목(menuStrip.Items)을 순회하며, 각 항목에 대해 SetVisibleTrue를 호출합니다.
  2. SetVisibleTrue 메서드
    • 특정 메뉴 항목(ToolStripMenuItem)의 Visible 속성을 true로 설정합니다.
    • 해당 메뉴의 DropDownItems를 순회하여, 각 서브 항목도 처리합니다.
    • 서브 항목이 또 다른 메뉴 항목(ToolStripMenuItem)일 경우 재귀 호출로 계속 처리하여 모든 서브메뉴가 보이도록 설정합니다.
    • 일반 항목(ToolStripItem)일 경우에도 Visible 속성을 true로 설정해 서브메뉴와 함께 표시됩니다.

활용 사례

  • 유동적인 메뉴 표시
    관리자와 일반 사용자를 구분하여 메뉴를 다르게 표시하거나, 특정 조건에 따라 메뉴의 보이는 범위를 제어할 때 사용할 수 있습니다.
  • 디버깅 또는 UI 점검
    개발 단계에서 숨겨진 모든 메뉴와 항목을 한 번에 보이게 하여 UI 검토 작업을 간소화할 수 있습니다.

코드의 장점

  1. 재귀 호출 방식으로 유연함
    메뉴 계층 구조의 깊이에 제한 없이 모든 메뉴를 처리할 수 있습니다. 즉, 2단, 3단, 4단 이상의 메뉴도 문제없이 처리합니다.
  2. 가독성과 유지보수 용이
    코드를 두 가지 함수로 분리하여 전체적인 구조를 간결하고 이해하기 쉽게 만들었습니다.
  3. 확장 가능성
    필요하다면 추가적인 로직(예: 특정 조건에서만 보이도록 설정)을 쉽게 적용할 수 있습니다.

예제 활용 화면

이 코드를 실제로 적용하면, 개발 중 숨겨진 모든 메뉴와 서브메뉴가 아래와 같은 구조로 한 번에 표시됩니다

- 파일 (Visible: true)
  └ 새로 만들기 (Visible: true)
  └ 열기 (Visible: true)
    └ 최근 문서 (Visible: true)
- 편집 (Visible: true)
  └ 잘라내기 (Visible: true)
  └ 복사 (Visible: true)
  └ 붙여넣기 (Visible: true)

이처럼 계층적으로 숨겨져 있던 메뉴가 모두 열리기 때문에, 메뉴의 UI와 로직을 점검하기에도 편리합니다.

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗