퇴근5분전



부모 - 자식(부) -- 자식(자식) --- 자식

위처럼 (부모 - 자식) 단위로 반복되는 트리구조형태일때

그 깊이를 알수 없으나 한번에 적용하고자 할때 재귀 호추를 이용해서 작업을 해왔음.

주의 : 반듯이 재귀호출은 탈출구가 필요함. ..
        --> 어차피 스택오버플로 예외가 발생할것임으로... 안되면 말자!

응용 예로는...
  파일 목록 읽어드리는 탐색기? ,  XML에서 구조파악 후 깊은곳에서 뭔가 꺼내와야 하는 탐색할때나???

가끔 만들어보는데 만들때마다 헷갈릴때가 있어서 기록해둠. ...


효심 깊은 자식들을 만들어볼까나...

{

체크(   부   ,  자 )

}
---------------------------

 체크 ( 부 , 자 )
{
     if( 자.자식들있나? )
          foreach( 자식  in 자.자식들 )
                      체크 ( 자, 자식 )
     else
          자.일(for 부모 );
}




 private void ucCompany_Body_Load(object sender, EventArgs e)
        {
            foreach (TabPage tp in tabControl1.TabPages)
            {
                foreach (Control ctrl in tp.Controls)
                {                                
                    fnTextBox_Next(tp, ctrl);          // 최초 함수 호출을 함.        
                }
            }
        }


        /// <summary>
        /// 나중에 이건 -> BaseUserCtrl 같은걸로 만들어서 빼야됨.
        /// </summary>
        /// <param name="pr"></param>
        /// <param name="tx"></param>
        private void fnTextBox_Next(Control pr, Control tx)
        {
            if (tx.HasChildren)
            {
                foreach (Control _pr in tx.Controls)
                {
                    fnTextBox_Next(tx, _pr);  // 함수내에서 다시 자기자신을 부르게 되는 재귀호출
                }
            }
            else
            {
                if (tx is TextBox) Control_AddIn_Function.TextBox_NextFocus(tx);

                 //재귀호출에 탈출구가 됨.
            }
        }



위 소스는 재귀에 사용하던 코드중 하나임.