遍历自定义控件求助
目标:1、一个按钮与一个标签形成自定义控件UA。
2、按钮的图片动态读取自某目录下(必须),标签的文字是这个图片的名称。
3、按钮按下时,按钮的TEXT修改为“V”,再次按下为“”。
4、调用页面中增加数个UA,同时有其它控件,要能够知道一共有多少个UA的TEXT是“V”。
目前状态:
1、UA定义
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace aa
{
public delegate void ClickHandler(object sender, EventArgs e);
public partial class zz : UserControl
{
public event ClickHandler OnClickMe = null;
private Image img;
public Image Img
{
get { return this.button1.BackgroundImage ; }
set
{
this.button1 .BackgroundImage = value;
Invalidate();
}
}
private string imgName;
public string ImgName
{
get { return imgName; }
set
{
imgName = value;
this.label1.Text = value;
}
}
private string btnText="";
public string BtnText
{
get { return btnText; }
set
{
btnText = value;
this.button1.Text = value;
}
}
public zz()
{
InitializeComponent();
this.button1 .Click += new EventHandler(UserControl1_Click);
}
private void UserControl1_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (OnClickMe != null)
OnClickMe(sender, e);
}
}
}
2、遍历控件以统计有多少个“V”
foreach (System.Windows.Forms.Control cc in this.Controls)
{
foreach (System.Windows.Forms.Control child in cc.Controls)
{
if (child is UA )
{
if (child.Text =="V")
{
问题
1、 外部点击事件的SENDER总是BUTTON,不是UA,所以不能遍历到UA --------------------编程问答-------------------- Controls类 是所有控件的父类 你的UA是什么控件? --------------------编程问答-------------------- 描述的不清,第4条是加载页面 调用 用户控件,只有当你点下按钮时候才知道有多少个"V",加载页面时候肯定没有点击啊 --------------------编程问答-------------------- 没有看太清楚楼主的描述。
控件的操作,用control。在生成控件的时候,可以指定id或者name的,然后在遍历的时候,通过唯一的id(或者name,如果你的name唯一的话)来判断。
希望对你有帮助。 --------------------编程问答-------------------- 开发环境:C# VS2008 WINFORM
ua是我自定义的控件。
--------------------编程问答-------------------- 使用foreach简单搞定 --------------------编程问答-------------------- foreach (Control control in this.Controls)
{
if (control is UA)
{
UA ua1 = (UA)control;
if(ua1.Text = "1234")
{
......
}
}
} --------------------编程问答-------------------- 兄弟,我在自己电脑上运行了一次,可以出现你说的效果
只是我用的是电脑是已经存在的空间,你结合着看看。
int i = 0;
foreach (Control control in this.Controls)
{
if (control is TextBox)
{
TextBox tb = (TextBox)control;
if (tb.Text == "1234")
{
i++;
}
}
}
MessageBox.Show("共有"+i+"个textbox");
补充:.NET技术 , C#