메뉴] 즐겨찾기 읽어들이기
이건 내 피씨에 즐겨찾기 폴더의 내용을 그대로 메뉴 스트립에 옮긴것임.
메뉴 클릭시 익스플로어를 실행하면서 해당 링크를 실행함.
해본것은 그냥 재귀호출을 통해 트리뷰나 메뉴스트립관련해서 똑같은 처리 방식을
테스트 해본것임.
아래 객체를 이용해서
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 : 음 참 별걸 다 적용했다는 생각이 듬...
'# 2) .Net ( Vs 2005 ) > WinForm' 카테고리의 다른 글
TextBox 에서 Enter키가 눌렸을 때 Tab 이동.. 관련해서 두가지.. (0) | 2009.06.05 |
---|---|
데이타 테이블 그리기. (2) | 2009.05.08 |
그래픽스. 어디에 그려지는가? (0) | 2009.05.08 |
테트리스 (0) | 2009.05.02 |
아날로그 시계 (0) | 2009.05.02 |