gpt4 book ai didi

c# - 向此类添加委托(delegate)或事件属性?

转载 作者:行者123 更新时间:2023-11-30 14:41:41 25 4
gpt4 key购买 nike

我创建了一个控件,其他开发人员可以在其中创建实例并使用。控件中有一个按钮单击。我如何允许开发人员在我的控件的某个部分插入他们自己的代码?我不确定在这种情况下是否或如何使用委托(delegate)或事件。有人可以在下面的例子中提供帮助吗:

public class MyControl : CompositeControl
{
...
void btnSubmit_Click(object sender, EventArgs e)
{
//DO SOMETHING
if (success)
{
//CALL DEVELOPER'S LOGIC
}
}
}

在开发者的代码中,当控件的按钮点击成功时,他们如何传入他们的逻辑?

protected override void CreateChildControls()
{
var ctlMyControl = new MyControl();

//ADD SuccessCode() TO ctlMyControl
//SO IT IS TRIGGERED ON SUCCESS
//MAYBE SOMETHING LIKE:
//ctlMyControl.SuccessEvent = SuccessCode()??

this.Control.Add(ctlMyControl);
}

protected void SuccessCode()
{
//DO SOMETHING
}

如何更新 MyControl 以允许此操作?

最佳答案

您需要添加一个 event到控件,像这样:

void btnSubmit_Click(object sender, EventArgs e) {
//DO SOMETHING
if (success) {
OnSomethingCompleted();
}
}

///<summary>Occurs when the operation is successfully completed.</summary>
public event EventHandler SomethingCompleted;
///<summary>Raises the SomethingCompleted event.</summary>
internal protected virtual void OnSomethingCompleted() { OnSomethingCompleted(EventArgs.Empty); }
///<summary>Raises the SomethingCompleted event.</summary>
///<param name="e">An EventArgs object that provides the event data.</param>
internal protected virtual void OnSomethingCompleted(EventArgs e) {
if (SomethingCompleted != null)
SomethingCompleted(this, e);
}

在表单中,您可以向事件添加处理程序,如下所示:

myControl.SomethingCompleted += myControl_SomethingCompleted;

void myControl_SomethingCompleted(object sender, EventArgs e) {
//Do things
}

有关详细信息,请参阅 documentation .

关于c# - 向此类添加委托(delegate)或事件属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3855910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com