問題描述:
在一個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";
}
}