问题描述:
在一个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";
}
}