自定义控件中怎么获取页面的其他控件

时间:2022-11-09 16:43:36

    /// <summary>
    /// CheckBoxListTrade控件
    /// </summary>
    public class RadioButtonListTrade : RadioButtonList
    {

        private TextBox _zprice;//
            //
        public TextBoxHouse Zprice
        {
            set { this._zprice = value; }
        }


我想这样但如果在源代码中设置会出错
无法从其“Zprice”属性的字符串表示形式“tbZprice”创建“HouseControls.TextBoxHouse”类型的对象。

15 个解决方案

#1


很简单,用Page属性来找到对页面的引用即可.另外你的问题跟你的标题有关系吗?

#2


怎么引用

#3


this.Page就是

#4


一个合理的架构要认真对待“职责”问题。

自定义控件并不拥有其他控件,也不要求其他控件作为参数提交给自己,那么就不能太想当然去假设别人的结构如何组织,只能通知别人而不能去“获取”别人。否则,你的控件会成为将来使用它的更大软件的隐藏杀手,稍一改动整个软件就莫名其妙地垮掉。

事件通知方法的具体实现可以参见:http://www.xker.com/page/e2007/0116/11248.html 或者自己google更多的。

#5


引用 4 楼 sp1234 的回复:
一个合理的架构要认真对待“职责”问题。 

自定义控件并不拥有其他控件,也不要求其他控件作为参数提交给自己,那么就不能太想当然去假设别人的结构如何组织,只能通知别人而不能去“获取”别人。否则,你的控件会成为将来使用它的更大软件的隐藏杀手,稍一改动整个软件就莫名其妙地垮掉。 

事件通知方法的具体实现可以参见:http://www.xker.com/page/e2007/0116/11248.html 或者自己google更多的。 

楼上的好心.不过要是做个控件显示页面上所有控件的信息怎么办.具体问题具体分析嘛.

#6


看来“控件”跟”控件”不是一个意思。太深的东西需要你说明你的意图,否则容易走偏。

例如你写的这个控件之后,将来新开发了别的控件并且用于页面,你在这个预先开发的控件中“获取了将来开发的新类型的控件”,你的控件打算如何处理这个未来类型控件呢?

#7


引用 6 楼 sp1234 的回复:
看来“控件”跟”控件”不是一个意思。太深的东西需要你说明你的意图,否则容易走偏。 

例如你写的这个控件之后,将来新开发了别的控件并且用于页面,你在这个预先开发的控件中“获取了将来开发的新类型的控件”,你的控件打算如何处理这个未来类型控件呢? 

 很简单.反射

#8


你的是复合控件??
如果是要引用页面上的一个textbox那么可以指定一个id
然后 findcontrol。。。

see:


http://www.cnblogs.com/huobazi/archive/2007/08/05/AdvertisementLazyLoadingControl.html

内有个属性:TargetContainerID

有个 FindControlHelper方法。

#9


反射当然很简单!其实软件中的任何事情都可能,大不了写个非托管程序到内存里一个字节一个字节去猜测数据......

但是在写程序时一定要定好切实可行的目标,不要随便用牛刀去杀鸡,那样在不具备庖丁的技术时容易伤到自己。好的程序总是看起来很干净、简洁的。

#10


我只是说要具体情况具体分析.如果都按照你说的每个类只管自己,那么像我所说的那种控件如何实现?

#11


两个控件的值有联动
不得已要这样写
写到控件里就不用每页都写一次了

我就是想传一个id过去
findcontrol我用过
我已经在在Render里用了
但还是说找不到

#12


用this.FindControl试一下.这个方法不是只找子控件的.具体要看你控件放置的容器.
不过你的设计应该有问题.最好是改下.

#13


我贴的链接内 是向下层 子控件 一直查找的 
希望有用

#14


好像如果在自定义控件里面的控件就可以用this.FindControl找到
外面的就不行了

#15


如果是外面且处于同一个naming container下的话也可以找到.你可以把两个控件放到一个Panel里用control1.FindControl('Control2ID')来试一下

#1


很简单,用Page属性来找到对页面的引用即可.另外你的问题跟你的标题有关系吗?

#2


怎么引用

#3


this.Page就是

#4


一个合理的架构要认真对待“职责”问题。

自定义控件并不拥有其他控件,也不要求其他控件作为参数提交给自己,那么就不能太想当然去假设别人的结构如何组织,只能通知别人而不能去“获取”别人。否则,你的控件会成为将来使用它的更大软件的隐藏杀手,稍一改动整个软件就莫名其妙地垮掉。

事件通知方法的具体实现可以参见:http://www.xker.com/page/e2007/0116/11248.html 或者自己google更多的。

#5


引用 4 楼 sp1234 的回复:
一个合理的架构要认真对待“职责”问题。 

自定义控件并不拥有其他控件,也不要求其他控件作为参数提交给自己,那么就不能太想当然去假设别人的结构如何组织,只能通知别人而不能去“获取”别人。否则,你的控件会成为将来使用它的更大软件的隐藏杀手,稍一改动整个软件就莫名其妙地垮掉。 

事件通知方法的具体实现可以参见:http://www.xker.com/page/e2007/0116/11248.html 或者自己google更多的。 

楼上的好心.不过要是做个控件显示页面上所有控件的信息怎么办.具体问题具体分析嘛.

#6


看来“控件”跟”控件”不是一个意思。太深的东西需要你说明你的意图,否则容易走偏。

例如你写的这个控件之后,将来新开发了别的控件并且用于页面,你在这个预先开发的控件中“获取了将来开发的新类型的控件”,你的控件打算如何处理这个未来类型控件呢?

#7


引用 6 楼 sp1234 的回复:
看来“控件”跟”控件”不是一个意思。太深的东西需要你说明你的意图,否则容易走偏。 

例如你写的这个控件之后,将来新开发了别的控件并且用于页面,你在这个预先开发的控件中“获取了将来开发的新类型的控件”,你的控件打算如何处理这个未来类型控件呢? 

 很简单.反射

#8


你的是复合控件??
如果是要引用页面上的一个textbox那么可以指定一个id
然后 findcontrol。。。

see:


http://www.cnblogs.com/huobazi/archive/2007/08/05/AdvertisementLazyLoadingControl.html

内有个属性:TargetContainerID

有个 FindControlHelper方法。

#9


反射当然很简单!其实软件中的任何事情都可能,大不了写个非托管程序到内存里一个字节一个字节去猜测数据......

但是在写程序时一定要定好切实可行的目标,不要随便用牛刀去杀鸡,那样在不具备庖丁的技术时容易伤到自己。好的程序总是看起来很干净、简洁的。

#10


我只是说要具体情况具体分析.如果都按照你说的每个类只管自己,那么像我所说的那种控件如何实现?

#11


两个控件的值有联动
不得已要这样写
写到控件里就不用每页都写一次了

我就是想传一个id过去
findcontrol我用过
我已经在在Render里用了
但还是说找不到

#12


用this.FindControl试一下.这个方法不是只找子控件的.具体要看你控件放置的容器.
不过你的设计应该有问题.最好是改下.

#13


我贴的链接内 是向下层 子控件 一直查找的 
希望有用

#14


好像如果在自定义控件里面的控件就可以用this.FindControl找到
外面的就不行了

#15


如果是外面且处于同一个naming container下的话也可以找到.你可以把两个控件放到一个Panel里用control1.FindControl('Control2ID')来试一下