实际上如何将来自 asp.net usercontrol[ascx 文件] 的抽象事件公开到容器 webforms 页面。这是我的场景,
我创建了一个 webforms usercontrol 一个 ascx 文件,并放置了一个带有验证器的数据绑定(bind)复选框列表来验证它(我知道这可以通过 webforms 本身完成,为什么你问一个 usercontrol,但这是一个场景)
现在我想向名为
OnValidating
的容器页面公开一个事件这将产生验证结果
事件签名如下:
public delegate void Validating(object source,EventArgs e);
public event Validating OnValidating;
public void InvokeOnValidating(EventArgs e)
{
Validating handler = OnValidating;
if (handler != null) handler(this, e);
}
根据 msdn 文档,页面框架处理事件订阅和取消订阅。所以我需要做的就是在验证失败时调用事件。太好了,我很高兴,但是,
当所有其他公共(public)属性显示时,我无法在属性窗口中显示该事件
为什么是我的
event invoker[InvokeOnValidating]
,event delegate[Validating]
当我输入usercontrolid.
时显示在智能感知列表中连同event[OnValidating]
.我只想公开事件。我还可以允许页面订阅在用户控件内创建的事件 TextboxChanged 吗?如果是这样,请给我代码。
注意:我希望看到更多的代码而不是冗长的解释
最佳答案
你在混合概念,你不需要委托(delegate)来注册事件,试试这段代码,我会在下面解释这些变化并尝试回答你的问题
public event EventHandler Validating;
private void OnValidating(EventArgs ea)
{
var e = Validating;
if (e != null)
e(this, ea);
}
在使用控件的页面上,注意On,框架为所有事件添加了这个:
<uc:MyUserControl OnValidating="myhandlermethodinpage" />
- VS 对此不是 100% 准确,有时控件的属性不会显示!智能更可靠
- 因为他们没有设置为私有(private),所以只有事件应该是公开的。
- 不确定是否可行,您需要捕获控件中文本框的事件并使其引发自己的新事件。
无法添加评论,但基本上如果您需要自定义事件参数,请这样做:
public event EventHandler<CustomEventArgs> Validating;
private void OnValidating(CustomEventArgs ea)
{
var e = Validating;
if (e != null)
e(this, ea);
}
public class CustomEventArgs:EventArgs{
public int MyProperty { get; set; }
}
关于c# - 将事件从 asp.net 用户控件公开到容器 Web 表单页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346324/