带有嵌入式MonthCalendar问题的UserControl

时间:2013-12-04 15:05:00

标签: c# winforms events user-controls monthcalendar

我希望有人可以帮助我。我在C#中创建了一个usercontrol,用于Winform。该控件包含各种控件,包括monthCalendar控件,但monthCalendar控件是我的问题所在。

我希望保存我的usercontrol的父表单触发一个代码块,以便在触发usercontrol中的monthCalendar的dateSelected事件时使用linq查询数据库。这个想法是usercontrol不应该知道事物的数据访问方面,以便usercontrol可以在其他项目中使用。

我希望有一种方法可以让dateSelected事件可用于父表单;我已经成功完成了点击事件等其他控件我似乎无法使这个工作用于monthCalendar,因为DateSelected使用DateRangeEventHandler而不是标准的EventHandler。

我希望这很清楚,因为我已经围绕这个块了,所以我不确定什么有任何意义:)任何帮助或建议如何我可以去编码这将非常感激。

2 个答案:

答案 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);