我希望有人可以帮助我。我在C#中创建了一个usercontrol,用于Winform。该控件包含各种控件,包括monthCalendar控件,但monthCalendar控件是我的问题所在。
我希望保存我的usercontrol的父表单触发一个代码块,以便在触发usercontrol中的monthCalendar的dateSelected事件时使用linq查询数据库。这个想法是usercontrol不应该知道事物的数据访问方面,以便usercontrol可以在其他项目中使用。
我希望有一种方法可以让dateSelected事件可用于父表单;我已经成功完成了点击事件等其他控件我似乎无法使这个工作用于monthCalendar,因为DateSelected使用DateRangeEventHandler而不是标准的EventHandler。
我希望这很清楚,因为我已经围绕这个块了,所以我不确定什么有任何意义:)任何帮助或建议如何我可以去编码这将非常感激。
答案 0 :(得分:0)
与Button事件相同。
在您的UserControl中,它看起来像这样:
public event DateRangeEventHandler DateChanged {
add { monthCalendar1.DateChanged += value; }
remove { monthCalendar1.DateChanged -= value; }
}
然后在您的表单中,像所有带事件的控件一样:
userControl11.DateChanged += userControl11_DateChanged;
void userControl11_DateChanged(object sender, DateRangeEventArgs e) {
// do something...
}
答案 1 :(得分:0)
您可以在MonthCalendar
中公开UserControl
,然后在Form
中使用以下内容订阅活动:
this.userControl.Monthcalender.DateSelected += new DateRangeEventHandler(Monthcalender_DateSelected)
或者您可以在UserControl
中创建一个新活动,该活动将在MonthCalendar.DataSelected
上展示。并在您的Form
订阅该事件,例如:
用户控件:
public UserControl1()
{
InitializeComponent();
this.monthCalendar1.DateSelected += new DateRangeEventHandler(monthCalendar1_DateSelected);
}
public void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
OnSeChanged(e);
}
public event DateRangeEventHandler SeChanged;
protected virtual void OnSeChanged(DateRangeEventArgs e)
{
if (SeChanged != null)
{
SeChanged(this, e);
}
}
形式:
userControl11.SeChanged += new DateRangeEventHandler(userControl11_SeChanged);