两个usercontrol之间互相调用方法

yeskele 2006-06-08 11:14:07
rt
有2个usercontrol。uc1和uc2
其中uc1里有个public sub add()
而我希望在uc2中通过一个button的click事件去调用这个uc1的add过程
请问有什么思路没?
...全文
560 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckyTOTO 2006-11-10
  • 打赏
  • 举报
回复
markk
tweedshh 2006-06-09
  • 打赏
  • 举报
回复
其实很简单,
用户控件也有自己的类,add()在此class中,只要在uc2中对uc1的class实例化,然后调用就可以了。类不管在那里,只要有权限都是可以调用和实例化的。
zhangxiaopin 2006-06-08
  • 打赏
  • 举报
回复
//****使用继承就可以了.
iamzrsoft 2006-06-08
  • 打赏
  • 举报
回复
请换用另一种用户自定义控件,功能会很强大,可以放在左侧工具条中使用,而uc这种东西,太弱了,我现在全不用它了
shixin1198 2006-06-08
  • 打赏
  • 举报
回复
那种用代理的方法不错(delegate)建议楼主采纳
reaperwu 2006-06-08
  • 打赏
  • 举报
回复
将 uc2 里面的 Button_Click 事件转换为 uc2 本身的事件 uc2_Event
在应用页面通过触发 uc2_Event 事件调用 uc1 的 Add 方法
cat_hsfz 2006-06-08
  • 打赏
  • 举报
回复
想了一下,提供一个稍微美观一点的解决方案,遵守松耦合的原则:

3.uc1提供public一个delegate,或者是event,和它想要调用的uc2的方法的签名一致。然后在Page中将uc2的被调用方法主动赋值给uc1的这个delegate。uc1在调用时先检查delegate是否为空,为空就不调用或者抛出异常。

这样就将两个控件相互联系的逻辑放到了它们的上面,减少了他们互相依赖的程度。不过如果你确认这两个控件的逻辑确实是紧耦合的,最好把它们封装到一个控件里面。
cat_hsfz 2006-06-08
  • 打赏
  • 举报
回复
两种方法,都不算太美观:

1.uc1通过this.Page.FindControl获取uc2(Control引用),然后将Control引用进行类型转换为uc2的类型,就可以对uc2进行操作了。

2.在Page上面添加public的方法,该方法直接调用uc2的public方法。uc1通过this.Page获取Page引用,然后还是类型转换为它所属的Page的类名,然后调用Page上的public方法。

为什么说不美观?因为uc1调用uc2这种设计本来就打破了uc的独立封闭性。本来Control之间就应该是送耦合的,互相独立的,任何两个Control的内部逻辑不存在依存关系,只有在他们的容器(例如Page)才定义它们的关系。你设计两个UserControl这样互相依存,最好就封装为一个,否则运行时FindControl失败那如何处理呢?
shalen520 2006-06-08
  • 打赏
  • 举报
回复
楼上正解
killerwc 2006-06-08
  • 打赏
  • 举报
回复
UserControl是相对独立的,如果想实现用户控件之间的通信
比如借助页面
加入说这两个用户控件都在一个页面上
可以利用Page.Parent.FindControl(string id)来取得另外一个用户控件
或者用户控件中的控件的引用句柄
在取得句柄的同时,还要对上述语句所取得的object进行强制转换
取得句柄后,就可以进行调用了。
这种方式虽然测试通过,但是并不科学。

如果是用户控件套用户控件,则方便许多
可以在外层的用户控件中手动添加内层用户控件的声明
即可通过声明生成的句柄调用内层控件的暴露的方法和属性

以上仅供参考,希望对你有所帮助
yeskele 2006-06-08
  • 打赏
  • 举报
回复
老规矩自己顶
yeskele 2006-06-08
  • 打赏
  • 举报
回复
对,
我本来就是设想的用parentpage来做媒介的
guag 2006-06-08
  • 打赏
  • 举报
回复
cat_hsfz(我的Blog在http://purl.oclc.org/NET/cathsfz)

的第三种方法是比较妥当的一种做法.其他的就稍显麻烦.
在用这种方法时,要以Page作为媒介来联接事件委托.
yeskele 2006-06-08
  • 打赏
  • 举报
回复
恩,现在要求我们用javascript来实现这些玩意。
smile9961 2006-06-08
  • 打赏
  • 举报
回复
可在調用uc1,uc2的page中公開屬性用於uc1,uc2的通信,調用時只需要me.page.xx or this.page.xx
amendajing 2006-06-08
  • 打赏
  • 举报
回复
关键就在findcontrol和object转化
ilovejolly 2006-06-08
  • 打赏
  • 举报
回复
同意楼上
lidong6 2006-06-08
  • 打赏
  • 举报
回复
在其中一个控件中添加事件,单击按钮时触发. 页面上调用另一个控件.
yeskele 2006-06-08
  • 打赏
  • 举报
回复
同意楼上的
恩,其实我平时用uc这些东西都只是实现一些简单的功能。
我觉得很多时候把心思花在实现这些上面还不如花在整个系统的分析设计上面。
大家还有什么想法尽管说吧,分不够我再开贴。
killerwc 2006-06-08
  • 打赏
  • 举报
回复
无论选用什么样的控件
首先应该考虑所选用的控件适合应用于什么场景
没有必要全都不用,也没有必要因为想用而用
像用户控件,不同页面反复用到的窗体和代码的组合
就可以使用,但是如果用户控件和页面之间的通信过于频繁
或过于繁琐,就要考虑封装用户控件是否具有实用价值
或者把用户控件拆分、组合、嵌套等解决这个问题
有些事情违反原则,无论怎样处理,他还是无法脱去违反原则的外衣
就算是用代理,甚至使用设计模式来武装
仍然是违反原则的,或者说是不被推荐的做法

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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