퇴근5분전

사용자 삽입 이미지

이건 내 피씨에 즐겨찾기 폴더의 내용을 그대로 메뉴 스트립에 옮긴것임.
메뉴 클릭시 익스플로어를 실행하면서 해당 링크를 실행함.

해본것은 그냥 재귀호출을 통해 트리뷰나 메뉴스트립관련해서 똑같은 처리 방식을
테스트 해본것임.



아래 객체를 이용해서
FavoritesMenuItems fMenuItem = new FavoritesMenuItems();
mainMenu1.MenuItems.Add( fMenuItem.GetDirectory( fMenuItem.FavoritesPath) );  

이 두줄이면 위 폼처럼 만들어짐.


아래 객체는 즐겨찾기 폴더에 데이타를 메뉴 스트립으로 만들어주는 객체임.

 /// <summary>
 /// 탐색기 - 즐겨찾기
 /// 메뉴로 등록하는 class
 /// </summary>
 class FavoritesMenuItems
 {
  public string FavoritesPath;
  Hashtable  htArray  = new Hashtable();

  public   FavoritesMenuItems()
  {   
   FavoritesPath = Environment.GetFolderPath( Environment.SpecialFolder.Favorites );  
  }   

  public MenuItem GetDirectory( string path)
  {
   System.Windows.Forms.MenuItem rootItem  = new MenuItem();  

   string[]   directorys = System.IO.Directory.GetDirectories( path );
   string[]   files  = System.IO.Directory.GetFiles( path );

   rootItem.Text = GetItemName( path);

   foreach( string directoryName in directorys)
   {    
    rootItem.MenuItems.Add(GetDirectory( directoryName ));
   }

   foreach( string fileName in files)
   {
    System.Windows.Forms.MenuItem  tempItem = new MenuItem();
    // Ht에 저장하면서 MenuItem에 등록!!
    SetArray(tempItem,  GetItemName( fileName ), fileName, 0);      
    tempItem.Click += new EventHandler(tempItem_Click);
    rootItem.MenuItems.Add( tempItem );  
   }
   return rootItem;
  }

  private string  GetItemName(string path)
  {
   int idx  = 0;

   idx = path.LastIndexOf(@"\");

   if( idx  <=  -1 ) return path;

   return path.Substring( idx+1, path.Length - idx-1);
  } 

 
  // 중복된 Key는 카운트 반영!
  private void SetArray(System.Windows.Forms.MenuItem  tempItem, string Key, string Value, int i)
  {   
   if( htArray.Contains( Key) == false)
   {    
    tempItem.Text = Key;
    htArray.Add( Key, Value);    
   }
   else
   {
    SetArray(tempItem,  Key + (i++).ToString() , Value, i);
   }
  }

  // 자기자신을 이용한 Value값 셀렉트
  private string this[string Key]
  {
   get
   {
    return (string)htArray[ Key ];
   }
  }

  // 서브메뉴에 대한 클릭이벤트..
  private void tempItem_Click(object sender, EventArgs e)
  {
   //MessageBox.Show( this[((MenuItem)sender).Text] );
   if( this[((MenuItem)sender).Text].Trim().CompareTo("") == 0)
    return;

   System.Diagnostics.ProcessStartInfo  pcssinfo = new System.Diagnostics.ProcessStartInfo( "explorer", this[((MenuItem)sender).Text]);
   System.Diagnostics.Process.Start( pcssinfo );
// 익스플로어를 실행함.
  }
 }

ps : 음 참 별걸 다 적용했다는 생각이 듬...