C# 如何通过按钮而不是直接交互来更改月历?

C# 如何通过按钮而不是直接交互来更改月历?,c#,winforms,C#,Winforms,我有一个GUI桌面应用程序,可以在文本框中输入日期,按下按钮返回另一个日期。我还使用月历选择日期,当从月历中选择日期时,文本框会自动更改。到目前为止还不错 但这是我的问题。正如我所解释的,当从月历中选择日期时,文本框输入会发生变化。但我想不出另一种方法。我希望当有人在文本框中输入日期并按下按钮时,月历会自动更改。否则,文本框和月历会显示不同的日期,这对于应用程序来说是不合适的 是否有一种方法可以通过文本输入,然后按一下按钮来修改月历,而不是使用鼠标 这是我的密码: namespace Windo

我有一个GUI桌面应用程序,可以在文本框中输入日期,按下按钮返回另一个日期。我还使用月历选择日期,当从月历中选择日期时,文本框会自动更改。到目前为止还不错

但这是我的问题。正如我所解释的,当从月历中选择日期时,文本框输入会发生变化。但我想不出另一种方法。我希望当有人在文本框中输入日期并按下按钮时,月历会自动更改。否则,文本框和月历会显示不同的日期,这对于应用程序来说是不合适的

是否有一种方法可以通过文本输入,然后按一下按钮来修改月历,而不是使用鼠标

这是我的密码:

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
           InitializeComponent();
          //...
        }

        private void button1_Click(object sender, EventArgs e)
        {
          string choosefridaydate = textBox1.Text;

          //code
        }

        private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
        {
            this.textBox1.Text = monthCalendar1.SelectionRange.Start.Date.ToString("yyyyMMdd");
            button1.PerformClick();
        }
    }         
}

您可以将
SelectionStart
SelectionEnd
属性设置为转换文本框中键入的字符串所获得的日期

private void button1_Click(object sender, EventArgs e)
{
    DateTime dt;
    string choosefridaydate = textBox1.Text;
    if (DateTime.TryParse(choosefridaydate, out dt))
    {
        monthCalendar1.SelectionStart = dt;
        monthCalendar1.SelectionEnd = dt;
    }
}
这种方法使用DateTime.TryParse转换用户在日期中键入的字符串。如果无法根据用户PC的国际设置将格式识别为有效日期,则TryParse将返回false,并且不会设置MonthCalendar

在这种情况下,您需要使用specifyng,该格式允许用户在文本框中键入

private void button1_Click(object sender, EventArgs e)
{
    DateTime dt;
    string choosefridaydate = textBox1.Text;
    if (DateTime.TryParse(choosefridaydate, out dt))
    {
        monthCalendar1.SelectionStart = dt;
        monthCalendar1.SelectionEnd = dt;
    }
}
还有一个SetDate方法可以更改当前选择的日期,但是您需要首先将输入文本框转换为有效日期

private void button1_Click(object sender, EventArgs e)
{
    DateTime dt;
    string choosefridaydate = textBox1.Text;
    if (DateTime.TryParse(choosefridaydate, out dt))
    {
        monthCalendar1.SetDate(dt);
    }
}
编辑
根据您的评论,如果日期的格式为
yyyyMMdd
,则需要使用DateTime.TryParseExact

DateTime dt;
string choosefridaydate = textBox1.Text;
if(DateTime.TryParseExact(choosefridaydate, "yyyyMMdd", 
                          CultureInfo.InvariantCulture, 
                           DateTimeStyles.None, out dt))
    monthCalendar1.SetDate(dt);

为字段设置更改事件并调用
.setDat(Date)
?我不明白您的问题?但是我试过的都不起作用,日历保持不变,没有变化。。顺便说一句,ChooseFridayDayDate是yyyyMMdd格式。这可能是一个原因吗?是的,可能TryParse返回false。我将使用DateTime.TryParseExact更新答案这有效:如果(DateTime.TryParseExact(选择FridayDate,“yyyyymmdd”,CultureInfo.InvariantCulture,DateTimeStyles.None,out dt))