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

}

}

时间: 2024-10-10 09:22:27

C# winform中获取多重布局控件属性的相关文章

winform中,如何控制控件位置随窗体的大小改变而改变

winform中,如何控制控件位置随窗体的大小改变而改变 有如下3种方法: 方法1 [csharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace MarkPrint

c#winform中如何修改ListView控件每个单元格的颜色

ListView在View属性为Details的时候它呈现的方式和DataGirdView差不多,它的每一行都是一个ListViewItem,然而每个ListViewItem都有一个BackColor的属性,但是设置了这个属性却没有任何作用.因为是ListView的每一行的样式都继承的父控件的样式所以无法改变. 解决方案: ListViewItem item; item = new ListViewItem(new string[] { "NAME","" });

WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用

http://www.cnblogs.com/wuhuacong/archive/2009/07/09/1520082.html 本篇介绍Winform程序开发中的布局界面的设计,介绍如何在我的共享软件中使用布局控件"WeifenLuo.WinFormsUI.Docking". 布局控件"WeifenLuo.WinFormsUI.Docking"是一个非常棒的开源控件,用过的人都深有体会,该控件之强大.美观.不亚于商业控件.而且控件使用也是比较简单的.先看看控件使用

C# WinForm中使用WPF的控件

步骤1:创建WinForm工程 步骤2:在刚刚创建的WinForm工程中新建或者添加现有的WPF用户自定义控件 <UserControl x:Class="wndFormTest.ComBoBoxButton" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&q

android中的五大布局(控件的容器,可以放button等控件)

一.android中五大布局相当于是容器,这些容器里可以放控件也可以放另一个容器,子控件和布局都需要制定属性. 1.相对布局:RelativeLayout @1控件默认堆叠排列,需要制定控件的相对位置 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" a

winform中如何使用timer控件实现欢迎(初始加载)窗口

第一步.新建窗体项目命名为:TestWelcomeFrm,如下图: 第二步.在新项目中,增加欢迎窗口,命名为WelFrm,整个项目目录如下: 第三步.修改program.cs中启动代码如下: WelFrm welFrm = new WelFrm(); if (welFrm.ShowDialog() == DialogResult.OK) { Application.Run(new ManiFrm()); } 第四步.修改welFrm窗口,增加Timer触发器控件,并设置其触发事件为:timer1

Mono for Android布局控件属性小结

1. layout_weight 用于给一个线性布局中的诸多视图的重要度赋值. 所有的视图都有一个layout_weight值,默认为零,意思是需要显示 多大的视图就占据多大的屏幕空 间.若赋一个高于零的值,则将父视 图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight 值以及该值在当前屏幕布局的整体 layout_weight值和在其它视图屏幕布 局的layout_weight值中所占的比率而定. 举个例子:比如说我们在 水平方向上有一个文本标签和两个文本编辑元素. 该

C#WinForm解决跨线程访问控件属性报错

方式一(在程序初始化构造函数中加一行代码): 1 public Form1() 2 { 3 InitializeComponent(); 4 Control.CheckForIllegalCrossThreadCalls = false; //设置不捕获线程异常 5 } 方式二(推荐): 1 private void btnLoop_Click(object sender, EventArgs e) 2 { 3 Thread thread = new Thread(()=> { 4 while

实时刷新winform中的某一个控件上的文字

需要注意的是,必须从UI线程,另外启动一个线程才可以. 在新线程调用异步刷新就OK了 Thread thread; private void button1_Click(object sender, EventArgs e) { thread = new Thread(new ThreadStart(AnotherRefresh)); thread.IsBackground = true; thread.Start(); } private void AnotherRefresh() { MyR