如何从 MonthCalendar 显示日期到 TextBox C#

Posted

技术标签:

【中文标题】如何从 MonthCalendar 显示日期到 TextBox C#【英文标题】:How to show date from MonthCalendar to TextBox C# 【发布时间】:2016-07-11 07:13:23 【问题描述】:

我有两种形式,一种是月份,另一种是TextBox。 问题是选择它后我没有在 TextBox 上显示日期。 为了确定我编写了工作代码,我只在一个表单上做了同样的事情,而且效果很好。 将 MonthCalendar 设置为 public,与需要显示日期的 TextBox 相同。

这是 Button 和月历的代码:

public void mcKalendar_DateChanged()

    frmNovoVozilo fNv = new frmNovoVozilo();
    fNv.txtDatKupovine.Text =
          mcKalendar.SelectionRange.Start.ToShortDateString();


private void btnDatum_Click(object sender, EventArgs e)

    frmKalendar fKalen = new frmKalendar();
    fKalen.StartPosition = FormStartPosition.CenterScreen;
    fKalen.Show();

也尝试过 DateSelected 并且它给了我相同的结果,什么都没有。 谢谢。

【问题讨论】:

您遇到的问题是您试图引用第二个表单范围之外的表单。除非您在创建第二个时引用原始表单,否则您无法影响更改。请参阅我的回答,了解 2 种方法可以达到您想要的结果 【参考方案1】:

将值传输到前一个表单的一种方法是使用表单关闭事件处理程序和 get/set 方法来提取值。例如:

form1 = new Form1();
form1.FormClosing += new FormClosingEventHandler(GetDateFromForm);

private void GetDateFromForm(object sender, FormClosingEventArgs e)

    textbox1.Text = from1.GetDate;

然后在你的月历表格中,使用

string date;

public string GetDate get return date; set date = value;

Public Form2()

    date = monthCalendar1.SelectionStart.ToShortDateString();

关闭日历后,所选值将被转移。

另一种方法是在第二个表单的构造函数中发送对要应用更改的表单的引用。

在您的主要表单(带有按钮的表单)中,当您创建弹出表单时,使用语法Form2 calendarform = new Form2(this) 并编写一个公共方法来满足您的需要

public void SetText(string text)

    textbox.Text = text;

在您的第二种表格(带有月历的表格)中,您将能够参考前一种方法。例如:

public partial class Form2 : Form

    Form1 _owner;

    public Form2(Form1 form)
    
        InitializeComponent();

        _owner = form;
    

    private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
    
        _owner.SetText(monthCalendar1.SelectionEnd.ToShortDateString());
    

因为我们在第二个表单中引用了前一个表单,所以您可以调用将在 form1 上运行的所有公共方法。因此,在这种情况下,您可以从 form2 调用 SetText() 方法,这会将文本框更改为我们想要的任何内容 - 在您的情况下,您可以选择月历的值。

使用DateChanged 方法意味着它会在您更改日期时实时调用所述方法。

【讨论】:

由于我是 C# 新手,我确实需要一些语法方面的帮助。在第二种方法中,“Form2 calendarform = new Form2(this)”去哪里了?我得到:上下文中没有“this”关键字。 this 部分基本上表示“这个对象”。所以在这种情况下,this 表示将 form1 发送到第二个表单。第二个表单的构造函数需要将 Form1 作为一个值。即Form2(Form1 originalform) 您需要将Form2 calendarform = new Form2(this) 部分放在调用您的月历表格的按钮中

以上是关于如何从 MonthCalendar 显示日期到 TextBox C#的主要内容,如果未能解决你的问题,请参考以下文章

DateTimePicker 的 MonthCalendar 的日期未更新

请教如何获取monthcalendar被选中的日期信息

如何应用VB.NET MonthCalendar控件

在monthcalendar中如何获取选定日期是星期几

如何获取monthCalendar中鼠标选定的日期 C#

从选定的月历日期获取星期