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

本文关键字:交互 月历 按钮 何通过 | 更新日期: 2023-09-27 18:28:39

我有一个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();
        }
    }         
}

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

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

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将不会被设置。

在这种情况下,您需要使用DateTime.TryParseExact指定允许用户在文本框中键入的格式

还有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);