【问题标题】:UserControl with embedded MonthCalendar problems带有嵌入式 MonthCalendar 问题的 UserControl
【发布时间】:2013-12-04 15:05:00
【问题描述】:

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

我希望包含我的用户控件的父窗体在触发用户控件中的 monthCalendar 的 dateSelected 事件时触发一段代码以使用 linq 查询数据库。这个想法是用户控件不应该知道事物的数据访问方面,以便用户控件可以在其他项目中使用。

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

我希望这一点很清楚,因为我一直在这个街区周围,所以我不确定还有什么意义 :) 任何关于我如何进行编码的帮助或建议将不胜感激。

【问题讨论】:

  • 为什么不在用户控件中创建一个方法然后你可以在父窗体中调用它
  • 欢迎来到 SO!请编辑您的帖子以包含给您带来麻烦的相关代码 - 查看您所描述的内容将使我们能够更好地帮助您。

标签: c# winforms events user-controls monthcalendar


【解决方案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);

【讨论】:

    猜你喜欢
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2014-12-25
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多