带有嵌入式 MonthCalendar 问题的 UserControl
Posted
技术标签:
【中文标题】带有嵌入式 MonthCalendar 问题的 UserControl【英文标题】:UserControl with embedded MonthCalendar problems 【发布时间】:2013-12-04 15:05:00 【问题描述】:我希望有人可以帮助我。我在 C# 中创建了一个用于 Winform 的用户控件。该控件包含各种控件,包括monthCalendar 控件,但是monthCalendar 控件是我的问题所在。
我希望包含我的用户控件的父窗体在触发用户控件中的 monthCalendar 的 dateSelected 事件时触发一段代码以使用 linq 查询数据库。这个想法是用户控件不应该知道事物的数据访问方面,以便用户控件可以在其他项目中使用。
我希望有一种方法可以让父表单可以使用 dateSelected 事件;我已经成功完成了其他控件的点击事件等我只是似乎无法为monthCalendar完成这项工作,因为DateSelected使用DateRangeEventHandler而不是标准EventHandler。
我希望这一点很清楚,因为我一直在这个街区周围,所以我不确定还有什么意义 :) 任何关于我如何进行编码的帮助或建议将不胜感激。
【问题讨论】:
为什么不在用户控件中创建一个方法然后你可以在父窗体中调用它 欢迎来到 SO!请编辑您的帖子以包含给您带来麻烦的相关代码 - 查看您所描述的内容将使我们能够更好地帮助您。 【参考方案1】:与 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...
【讨论】:
嗨 Lars - 谢谢这成功了,我可以发誓我早点尝试过这个,但我想不是。 :) 感谢您的帮助。【参考方案2】:您可以在您的UserControl
中公开MonthCalendar
,然后在您的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);
【讨论】:
以上是关于带有嵌入式 MonthCalendar 问题的 UserControl的主要内容,如果未能解决你的问题,请参考以下文章
MonthCalendar.SelectionRange 数据绑定示例