竟然可以这样访问私有控件

hrb133yqq 2007-05-19 06:58:31
建了一个用户控件,名称是UserControl1,上面放一个button,默认的名字是button1,可访问性是privite。
另建一个form窗体,上面放一个Panel,默认名称是panel1,在panel1中加载一个UserControl1实例,竟然可以通过下面的方法对私有控件button1的属性赋值。


private void Form1_Load(object sender, EventArgs e)
{
UserControl1 uc1 = new UserControl1();
panel1.Controls.Add(uc1);
GetFPTitle(this.Controls);
}

public static void GetFPTitle(Control.ControlCollection cc)
{
foreach (Control ct in cc)
{
if (ct is GroupBox)
{
GroupBox gb = (GroupBox)ct;
GetFPTitle(gb.Controls);
}
if (ct is Panel)
{
Panel p = (Panel)ct;
GetFPTitle(p.Controls);
}
if (ct is UserControl)
{
UserControl uc = (UserControl)ct;
GetFPTitle(uc.Controls);
}

switch (ct.Name)
{
case "button1":
ct.Text = "按钮!";
break;
default:
break;
}
}
}

欢迎解释一下原因。

谢谢!

不信你试试。
...全文
242 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hrb133yqq 2007-05-21
  • 打赏
  • 举报
回复
感谢以上回复,特别是LWWANDVB(编程小子) 。
偶明白了!
zxkid 2007-05-19
  • 打赏
  • 举报
回复
其实,button1可访问性是privite, 是对其它类而言的
对UserControl1类(Button1应该是UserControl1类的成员)没有访问限制
spkl1 2007-05-19
  • 打赏
  • 举报
回复
private 私有成员只有在声明它们的类和结构体中才是可访问的,对于控件所在的类,可以不考虑公有和私有
LWWANDVB 2007-05-19
  • 打赏
  • 举报
回复
嗯,再补充一下。这种情况就象是
private int _t;
public int t
{
get{return _t;}
set{_t=value;}
}

_t是私有成员,但是我一样可以通过t来改变_t,楼主明白么?
LWWANDVB 2007-05-19
  • 打赏
  • 举报
回复
很正常的,因为控件集合是公开的,就算Button1是私有,但它在一个集合的中,也可以把它的属性改掉。
spkl1 2007-05-19
  • 打赏
  • 举报
回复
如果只找button1 可以修改下GetFPTitle()函数``传参直接传UC1``pannel和groupbox的判断也可以注释掉`这样只遍历UC1的子控件`
spkl1 2007-05-19
  • 打赏
  • 举报
回复
遍历了所有的控件以及子控件(递归)``根据控件名称得到控件实体``然后赋值``

不好意思``之前你开过贴``不过我一直没看懂``

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧