如何解决需要另一个类中的事件处理程序
我有一个用户控件(下面代码中的 VCtrlDetails),它承载一个私有的数据网格(detailsGrid)。 现在,我在另一个用户控件(UcResult_Details)中加载了这个控件,我想在这个另一个用户控件中处理网格选择更改事件。
public partial class VCtrlDetails : UserControl
{
public event EventHandler<bool> EnableEditTemplateButton;
private void InitializeComponent()
{
private System.Windows.Forms.DataGrid detailsGrid;
this.detailsGrid.SelectionChanged += new
System.EventHandler(this.detailsGrid_SelectionChanged);
}
private void detailsGrid_SelectionChanged(object sender,EventArgs e)
{
EnableEditButton?.Invoke(this,IsApproved());
}
public bool IsApproved()
{ }
}
public partial class UcResult_Details : UserControl
{
private readonly VCtrlDetails vCtrlDetails;
UcResult_Details()
{
//Need to subscribe to vCtrlDetails' grid selection changed event here in this ctor
}
}
我不太熟悉事件处理程序,因此坚持解决方案,因为网格对象在用户控件“VCtrlDetails”中是私有的,因此不能直接执行以下操作: vCtrlDetails.detailsGrid.SelectionChanged += DetailsGrid_SelectionChanged
解决方法
您需要将事件从 VCtrlDetails
类中冒泡出来。您可以通过在 VCtrlDetails 类中创建一个事件并允许您的 UcResult_Details 类订阅它来实现。
public partial class VCtrlDetails : UserControl
{
public event EventHandler<bool> EnableEditTemplateButton;
public event EventHandler<EventArgs> DetailsGridSelectionChanged;
private void InitializeComponent()
{
private System.Windows.Forms.DataGrid detailsGrid;
this.detailsGrid.SelectionChanged += new
System.EventHandler(this.detailsGrid_SelectionChanged);
}
private void detailsGrid_SelectionChanged(object sender,EventArgs e)
{
EnableEditButton?.Invoke(this,IsApproved());
//Raise your custom event
DetailsGridSelectionChanged?.Invoke(this,e);
}
public bool IsApproved()
{
}
}
public partial class UcResult_Details : UserControl
{
private readonly VCtrlDetails vCtrlDetails;
UcResult_Details()
{
//Need to subscribe to vCtrlDetails' grid selection changed event here in this ctor
this.vCtrlDetails.DetailsGridSelectionChanged += new
EventHandler(this.vCtrlDetailsSelectionChanged);
}
private void vCtrlDetailsSelectionChanged(object sender,EventArgs e)
{
//Do whatever
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。