C# winform中獲取多重佈局控件屬性

問題描述:

在一個form窗體中定義了一個tabcontrol控件,tabcontrol包含多個page,每個page有自己的panel容器,容器裏面有自定義的webnavigationbox控件,webnavigationbox控件中又包含了一個textbox控件。

現在要獲取被選中的一個標籤頁的的textbox控件的文本內容。


思路:在tabselected響應事件中添加代碼才能實時獲取


注意:如果使用一下代碼將會出錯

 

_tabs.Selected += new System.Windows.Forms.TabControlEventHandler(_tabs_Selected);//綁定響應函數


 private void _tabs_Selected(object sender, TabControlEventArgs e)
 {
var navbox = new webnavigationbox();

var tab = _tabs.selected();

var textbox = new Textbox();

if(tab == null)

url= null;

else

{

foreach(var c in tab.controls)

{

if(c is webnagitionbox)

navbox = (webnavigationbox)c;

}

foreach(var c in navbox .controls)

{

if(c is Textbox)

textbox = (Textbox)c;

}

if(navbox == null)

url= null;

else

url = textbox.text;

}

}


問題出現了,這裏的代碼是在tabcontrol中找webnavigationbox 然後在webnavigationbox中找textbox,忽略了panel這個容器的中間層作用,導致了每次訪問url都是null.

解決思路很簡單,按照層次關係foreach就行了,大致代碼如下:

  if (tab != null)
            {
                foreach (var c in tab.Controls)
                {
                    if (c is Panel)
                    {
                        mypanle = (Panel)c;
                    }
                }
                foreach (var c in mypanle.Controls)
                {
                    if (c is WebNavigationBox)
                    {
                        navbox = (WebNavigationBox)c;
                    }
                }
                if (navbox.Address != null)
                {
                    url = navbox.Address;
                    title = tab.Text;
                }
                else
                {
                    url = "http://www.baidu.com";                   
                }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章