퇴근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 : 음 참 별걸 다 적용했다는 생각이 듬...

System.Diagnostics.ProcessStartInfo  pcssinfo
= new System.Diagnostics.ProcessStartInfo( "isqlw", dbString[ Dbtype.STG ]);
System.Diagnostics.Process.Start( pcssinfo );

isqlw 는 2000 일때의 실행 파일명이었던듯 함.
사용자 삽입 이미지

이건 SqlManager의 속성을 보면 실행파일명이 나오는데
cmd 창에   실행명 /? 을 넣으면 위와 같은 알림창이 뜸.
위 정보를 이용해서 매니져를 여러개의 데이타베이스 서버중에 서버를 지정해서 접속이 가능함.

'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

드레그 앤 드랍! (2)  (0) 2009.05.09
드래그 앤 드랍!  (0) 2009.05.09
데이타테이블 컬럼위치 바꾸기  (0) 2009.05.08
이벤트  (0) 2009.05.08
Enum 과 Enum 비트 마스크  (0) 2009.05.08

전에 데이타그리드뷰를 다뤄보다가 열이동을 보다가 직접 만들어본 메서드임.



// 데이타 테이블에 담긴 컬럼을 위치를 바꾸는 메서드.  
  private DataTable ChangColumn(DataTable  sourceDt ,int ColumnIndex1 , int ColumnIndex2 )
   {
    DataTable dt  = new DataTable();
    if( sourceDt == null) return dt;

    for(int i = 0; i < sourceDt.Columns.Count ; i ++)
    {
     if( i == ColumnIndex1)
     {
      dt.Columns.Add( sourceDt.Columns[ ColumnIndex2 ].ColumnName );
     }
     else if ( i == ColumnIndex2 )
     {
      dt.Columns.Add( sourceDt.Columns[ ColumnIndex1 ].ColumnName );
     }    
     else
     {
      dt.Columns.Add( sourceDt.Columns[i].ColumnName );
     }
    }

    foreach( DataRow dr  in sourceDt.Rows )
    {
     DataRow insertDr  =  dt.NewRow();

     for(int j = 0; j < dr.ItemArray.Length ; j ++)
     {
      if( j == ColumnIndex1)
      {
       insertDr[j] = dr[ ColumnIndex2 ];
      }
      else if ( j == ColumnIndex2 )
      {
       insertDr[j] = dr[ ColumnIndex1 ];      
      }     
      else
      {
       insertDr[j] = dr[ j ];      
      }
     }
     dt.Rows.Add( insertDr );
    }

    return dt;

   }


//  datatable.Rows.Insert() 와  datatable.ImportRow()
에서

같은 Hash코드를 가진(동일 메모리 공간) Row를 DataTable에 입력시

ImportRow는 적용되지만 Insert()는 안됨.

해당 RowCollection 과 관련되어
Insert시 해당 컬렉션에 DataRow가 존재하며 에러 반환.
Import는 있든 없든 무조건 DataRow를 복사해서 추가함.

ex)
  1 : DataRow drd  = ds.Tables[0].NewRow();
  2 :   DataRow drd  = ds.Tables[0].Rows[0];

 ds.Tables[0].Rows.Add( drd); 
 ds.Tables[0].ImportRow( drd );  

2 -> Add나 Insert 는 안들어감. Import는 들어감.


'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

드래그 앤 드랍!  (0) 2009.05.09
Ms-Sql을 띠우자!  (0) 2009.05.08
이벤트  (0) 2009.05.08
Enum 과 Enum 비트 마스크  (0) 2009.05.08
Xml 직렬화...  (0) 2009.05.08