gpt4 book ai didi

C# - EventHandler 始终为空

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

我正在尝试在 UserControl 和 Form 之间实现一个非常基本的 EventHandler。关于订阅事件,我做错了什么?无论我尝试什么,CreateButtonEvent 始终为空。我最初试图在两个 UserControl 类之间执行此操作,但决定使用 Form 作为订阅者,假设 UserControl 订阅可能是问题所在。我也尝试过使用委托(delegate),但没有成功。

我已经在这个网站上查看并实现了无数解决方案来解决这个完全相同的问题,但我仍然无法让 Form 类订阅 UserControl 类中的事件。我确信这是一个非常简单的错误,我就是无法辨认出来。谁能给我一些见解?

这是用户控件类

using System;
using System.Windows.Forms;

namespace SequenceAutomation
{
public partial class LoginUserControl : UserControl
{
public event EventHandler CreateButtonEvent;

public LoginUserControl()
{
InitializeComponent();
}

protected void gotoCreate(object sender, EventArgs e)
{
if (CreateButtonEvent != null)
CreateButtonEvent(this, e);
else
Console.WriteLine("CreateButtonEvent is null");
}
}
}

这是表单类

using System;
using System.Windows.Forms;

namespace SequenceAutomation
{
public partial class ApplicationContainer : Form
{
private LoginUserControl login = new LoginUserControl();
private CreateRecUserControl createRec = new CreateRecUserControl();

public ApplicationContainer()
{
InitializeComponent();
login.CreateButtonEvent += gotoCreate;
}

protected void gotoCreate(object sender, EventArgs e)
{
login.Hide();
createRec.Show();
}
}
}

最佳答案

你的问题在这里:

    private LoginUserControl login = new LoginUserControl();
private CreateRecUserControl createRec = new CreateRecUserControl();

public ApplicationContainer()
{
InitializeComponent();
login.CreateButtonEvent += gotoCreate;
}

您正在创建一个 LoginUserControl 作为表单中的变量并订阅它,但您还没有将它添加到表单的任何地方。就像在里面一样,没有地方可以放置 Children.Add(login)

我猜您在表单上有另一个 LoginUserControl 的副本,您将其放置在设计器中,这就是您在运行应用程序时与之交互的那个副本。该事件始终为空,因为您已在不同的用户控件上订阅了该事件。

转到设计器,单击用户控件,转到属性 (F4),单击事件按钮,找到 CreateButtonEvent 并添加您的 gotoCreate 方法。

然后删除您创建的成员变量 login,因为那样只会造成混淆。

此外,与 CreateRecUserControl 相同。如果它没有添加到设计器中,请将其添加到您的设计器中并删除您的成员变量 createRec

enter image description here

关于C# - EventHandler 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35560446/

28 4 0