c# tcbs之遞迴方法查詢符合條件的控制元件

wisdomone1發表於2012-04-17
 public CoreTextBox FindAccountNumberTextBox(Control parentControl) //parentcontrol在此為窗體
        {
            CoreTextBox textBox = null;//要返回匹配條件的文字框(當然經過TCBS封裝過的)
            if (parentControl != null) //判斷方法傳入引數是為空
            {
                textBox = parentControl as CoreTextBox;//傳入引數可能為窗體或窗體的子控制元件,透過as進行靈活操作,用as即使轉換不成功,也只是返回NULL,而不是異常

                //此IF是個匹配條件,與上面的as結合起來,textbox!=null表明它是coretextbox
                //textbox.use表明文字框的用途必須是accountnumber,其它文字框就過濾掉了
                if ((textBox != null) && (textBox.Use == CoreTextBox.TextBoxUse.AccountNumber))
                {
                    return textBox;//符合文字框且文字框用途是accountnumber才返回textbox
                }
                if (parentControl.HasChildren)//傳入的方法引數為窗體,haschildren屬性就是真,表明有子控制元件
                {
                    //遍歷有子控制元件的窗體
                    for (int i = 0; i < parentControl.Controls.Count; i++)
                    {
                        //注:在此又呼叫本身方法(遞迴,即方法呼叫自己),只是此時方法引數由原來的窗體變為窗體下在遍歷的某個子控制元件
            //在此為窗體某個textbox(coretextbox),執行到此方法時,又開始從此方法的開頭部分執行,邏輯為:
            //判斷此子控制元件不空,且是文字框,然後,判斷它的用途是不是acctountnumber,發現有些文字框不是,就不會執行對應if語句,
            //接著繼續執行判斷此子控制元件是否有子控制元件,發現文字框沒有子控制元件,不再執行最後的遍歷程式碼;依此邏輯重複迴圈其它的子控制元件
            //僅找到一個符合條件的子控制元件
                        textBox = this.FindAccountNumberTextBox(parentControl.Controls[i]);
                        //找到了此子控制元件,就返回此子控制元件
            if (textBox != null)
                        {
                            return textBox;
                        }
                    }
                }
            }
            return null;//方法引數為空,直接返回null
        }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-721447/,如需轉載,請註明出處,否則將追究法律責任。

相關文章