关于控件的name属性

习惯了在设计器里添加控件的同学们可能和我一样很少用到控件的name属性,甚至网络上的大部分人都认为name属性是不能更改的,某种角度上说,这是个误会~

1. 在窗体的Designer.cs文件中,我们可以看到很多诸如this.Name="Form1";这样的语句;

2. 当使用上一级控件的Controls.Find方法时(如窗体的this.Controls.Find()),会发现它的返回值是一个Control数组,并且有这样的说明:Searches for controls by their System.Windows.Forms.Control.Name property and builds an array of all the controls that match 。

这些都表明,Name属性不仅可以更改,而且可以相同。

但是,仅仅这样就会有很多人头大:为什么一个控件会在被赋予名字之前就可以用名字找到它?如果两个控件名字相同,那程序怎么进行区分?

其实,我们所理解的Name属性,和上面所展示的Name属性,是有本质区别的:

在设计器的属性窗口中,我们会看到Name属性是被括号括起来的,这一对括号是在说明,你看到的Name属性只是表面,在这个属性的背后才是程序真正识别一个控件的东西。这个东西在编译之前的代码中是(Name)属性,在运行的程序中被称为“句柄”。

说白了,就是内存指针。

对于(Name)属性的本质,是一个在编程环境中(如Visual Studio.NET)创建和更改,而无法在代码中更改的东西,它就是你看到的变量,是this.Name中的this,而不是Name。

************************ 华丽的分割线 *************************

这样大家可以在自己的程序中做个试验,尝试更改一个控件的Name属性,并通过这个属性引用它,你会发现,程序运行的时候Name属性和某些控件的Text属性差别很小。

有的同学可能担心,如果Name属性可以相同,那怎么知道通过这个属性找到的控件中,究竟哪一个是我想要的呢?

对于不同类型的控件,在你要找它的时候,你就已经知道答案了:别忘了,C#中的变量都是强类型的。

对于相同类型的控件……你只有避免让这些控件的Name属性相同。

reload note: 2010-05-20 http://blog.renren.com/blog/bp/Qm0pxeS07l

你可能感兴趣的:(关于控件的name属性)