【问题标题】:how to display future date in datetimepicker in windows application?如何在 Windows 应用程序的 datetimepicker 中显示未来日期?
【发布时间】:2012-08-09 05:11:27
【问题描述】:

我正在创建一个 Windows 应用程序,其中我使用了两个表单。第一个表单包含第一个 datetimepicker,第二个表单包含第二个 datetimepicker。如果我在第一个 datetimepicker 中选择任何日期,那么在第二个 datetimepicker 中显示未来日期,即 6 个月的差异.以下是示例

如果我在第一个 datetimepicker 中选择日期,即 8/9/2012 (mm:dd:yyy) 然后

在第二个 datetimepicker 显示日期,即 2/8/2013(mm:dd:yyy) 中,第二个 datetimepicker 必须有 6 个月的差异。 .

【问题讨论】:

标签: c# .net-3.5


【解决方案1】:

这应该有帮助

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // Initialize picker 
        dateTimePicker2.Value = Convert.ToDateTime(ObjectForValue1).AddMonths(6);
    }

    private void dateTimePicker2_ValueChanged(object sender, EventArgs e)
    {
        // Set title bar to selected date.
        DateTime result = dateTimePicker2.Value;
        this.Text = result.ToString();
    }
    }
}

【讨论】:

  • 我有两种不同形式的 datetimepicker 那么如何访问 datetimepicker 控件
  • 在web应用中,可以使用session,类似的将数据存储在某种对象中进行缓存。
【解决方案2】:

在第二次阅读您的问题时,我现在看到您有两种不同的形式。您需要在第一种形式中公开DateTimePicker.ValueChanged 事件,然后在第二种形式中公开DateTimePicker.Value 属性。例如:

class DateEventArgs : EventArgs
{
    public DateTime Date {get; private set;}

    public DateEventArgs(DateTime d) 
        : base()
    {
        this.Date = d;
    }
}

class FirstForm : Form
{
    DateTimePicker dtp = new DateTimePicker();

    public event EventHandler<DateEventArgs> DateSelected;
    protected virtual void OnDateSelected(DateEventArgs e)
    {
        EventHandler<DateEventArgs> handler = DateSelected;
        if(handler != null) handler(this, e);
    }

    public FirstForm()
    {
        this.Controls.Add(dtp);
        dtp.ValueChanged += new EventHandler(dtp_ValueChanged);
    }

    void dtp_ValueChanged(object sender, EventArgs e)
    {
        DateEventArgs dea = new DateEventArgs(dtp.Value.Date);
        OnDateSelected(dea);
    }
}

class SecondForm : Form
{
    DateTimePicker dtp = new DateTimePicker();

    public DateTime SelectedDate
    {
        set { dtp.Value = value; }
    }

    public SecondForm()
    {
        this.Controls.Add(dtp);
    }
}

static class Controller
{
    FirstForm f1;
    SecondForm f2;

    static void Go()
    {
        f1 = new FirstForm();
        f2 = new SecondForm();
        f1.DateSelected += new EventHandler<DateEventArgs>(f1_DateSelected);

        f1.Show();
        f2.Show();
    }

    static void f1_DateSelected(object sender, DateEventArgs e)
    {
        f2.SelectedDate = e.Date.AddMonths(6);
    }
}

【讨论】:

  • 它在 += 无效令牌上显示错误,并且方法在新 EventHandler 上有返回类型。以及如何在第二种形式上调用此方法?
  • 我在第一个表单上有第一个 datetimepicker,在第二个表单上有第二个 datetimepicker。
  • 是的,我意识到了这一点并更新了我的答案。它未经测试,但希望这能让您了解您必须做什么。
  • 但我的 datetimepicker 名称是 firstdatetimepicker 和 seconddatetimepicker。我是编程新手,请正确解释需要在哪里编写此代码
  • @Maddy 无意冒犯,但这可能不是一个开始学习的好问题。我建议您退后一步,首先了解公开类的属性,然后了解引发和处理事件。然后回到这个问题,试着理解这段代码在做什么。我相信我写的很简单,但我会在向f1.DateSelected 添加事件处理程序时删除 lambda。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多