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";                   
                }

}

C# winform中获取多重布局控件属性

上一篇:详解C#的break,continue,return


下一篇:C语言ASCII码、运算符优先级、转义字符