C# 使用一个月日历填充2个文本框

C# 使用一个月日历填充2个文本框,c#,winforms,monthcalendar,C#,Winforms,Monthcalendar,我想知道您是否可以使用一个月的日历在windows窗体上填充两个文本框。一个用于开始日期,一个用于结束日期。我知道如何通过单击日历来填充两个文本框,但现在如何通过单击1填充开始日期,清除日历,然后通过第二次单击日历来填充结束日期 这可能吗?如果可能,我将如何在C windows窗体中实现这一点?您可以处理所选日期事件,如下所示: public Form1() { InitializeComponent(); mthCalendarMaster.Da

我想知道您是否可以使用一个月的日历在windows窗体上填充两个文本框。一个用于开始日期,一个用于结束日期。我知道如何通过单击日历来填充两个文本框,但现在如何通过单击1填充开始日期,清除日历,然后通过第二次单击日历来填充结束日期


这可能吗?如果可能,我将如何在C windows窗体中实现这一点?

您可以处理所选日期事件,如下所示:

    public Form1()
    {
        InitializeComponent();
        mthCalendarMaster.DateSelected += mthCalendarMaster_DateSelected;
    }

    private void mthCalendarMaster_DateSelected(object sender, DateRangeEventArgs e)
    {
        if (string.IsNullOrWhiteSpace(textBox1.Text))
            textBox1.Text = e.Start.ToShortDateString();
        else
            textBox2.Text = e.Start.ToShortDateString();
    }

注意:在窗体的构造函数中定义事件处理程序并不是最好的方法。

这将使两个文本框具有当前月份的开始日期和结束日期,所有这些都通过绑定源绑定:

        BindingSource source = new BindingSource();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SetSource();
            textBox1.DataBindings.Add("Text", source, "Start", true);
            textBox2.DataBindings.Add("Text", source, "End", true);
        }

        private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
        {
            SetSource();
        }

        private void SetSource()
        {
            source.DataSource = monthCalendar1.GetDisplayRange(true);
        }
    }

我们在DateChanged处理程序中调用SetSource,以使文本框与日历迭代上个月、下个月保持同步……

您可以使用日历迭代,否则我不确定是否理解您的问题…@alstonp-如果我将其切换为日期时间选择器,将使用什么语法来实现我想要的结果?再次,我不太清楚你在这里要什么。是否根据开始日期自动填充结束日期?@alstonp否,我想选择一个日期,让它填充txtbox1。一次txtbox1.Text!=Null清除日历上选择的日期。在日历上选择第二个日期,并用该第二个日期填充txtbox2。这有助于澄清我的想法吗?是的,谢谢:我明白了,让我写点东西,语法还有其他修改吗?如果我只是将这个语法复制/粘贴到我的过程中,什么都不会发生?textbox1未从mthCalenarMaster中获取所选的值。您需要绑定事件:单步执行我的代码它只会命中块,而不会命中您发布的任何代码:public Form1{InitializeComponent;}@MasterOfStupidQuestions单击控件后是否设置了断点并尝试设置通过?@MasterOfStupidQuestions,您的表单名是否为Form1?相同的场景,我已将您的代码添加到我的项目中,并且文本框从不显示月历上选择的日期…@MasterOfStupidQuestions抱歉,但不可能,除非您在问题中提出的是其他问题。这将把文本框绑定到monthcalendar上当前显示的月的开始和结束日期。我的两个文本框命名为textbox1&textbox2-日历名为mthCalendarMaster-我用您的语法更改了日历的名称,但文本框中没有填充选定的日期…通过我的代码,它只会点击公共表单1{InitializeComponent;}上面的任何语法都不需要设置事件处理程序。双击设计器中的表单将连接表单加载事件,对于datechanged,也可以在设计器中单击monthcalendar,然后在events上的properties窗口中搜索date changed,然后双击它,它将作为表单的加载生成这两个处理程序,然后您可以粘贴代码。