不同窗体中的委托事件不能触发问题

jsstb 2008-12-30 03:18:52
我在窗体A中使用了自定义控件,该控件中委托了事件ColorChanged,在窗体B中响应该事件:
先在解决方案资源管理器中引用命名空间ctlResolution,然后在窗体B中写如下代码
ctlAppearance.ctlAppearance ctlAppearance1; //声明对象

ctlAppearance1 = new ctlAppearance.ctlAppearance(); //实例化对象

//事件委托给方法ctlAppearance1_ColorChanged(Color color1)
ctlAppearance1.ColorChanged += new ctlAppearance.ctlAppearance.DelegateColorChange(ctlAppearance1_ColorChanged);

void ctlAppearance1_ColorChanged(Color color1)
{
this.BackColor = color1; //改变窗体颜色
}

在控件中定义委托代码为
public delegate void DelegateColorChange(System.Drawing.Color color1);

问题是:调试时候发现在B窗体中没有触发事件ColorChanged?但是如果我把方法ctlAppearance1_ColorChanged()的代码写到A窗体中
,就可以触发。即在同一个窗体下可以触发事件,跨窗体则不行?
...全文
100 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
youqi1984 2008-12-30
  • 打赏
  • 举报
回复
看来委托和事件理解的不够好。
marvelstack 2008-12-30
  • 打赏
  • 举报
回复
你把A窗体中的控件设置为public,然后在B窗体中注册该控件的事件。
jsstb 2008-12-30
  • 打赏
  • 举报
回复
那么咋办?是先把A窗体下的控件对象当做参数传递到B窗体吗?
gomoku 2008-12-30
  • 打赏
  • 举报
回复
ctlAppearance1 = new ctlAppearance.ctlAppearance(); //实例化对象
此对象不是你在窗体A中的控件对象
xiaoyuzi 2008-12-30
  • 打赏
  • 举报
回复
ctlAppearance1.ColorChanged += new ctlAppearance.ctlAppearance.DelegateColorChange(formb.ctlAppearance1_ColorChanged);
formb为窗体b的实例

111,130

社区成员

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

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

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