0

我想根据截止日期还剩多少天在警报框中显示消息,说如果还剩一天,警报框就会出来并说“您的续订日期还剩一天!”。我使用以下代码

 if ((RenewalDate.Value - DateTime.Now).TotalDays == 5)
                            MessageBox.Show("Your deadline is within 5 days");
                        else if ((RenewalDate.Value - DateTime.Now).TotalDays == 4)
                            MessageBox.Show("Your deadline is 4 days left");
                        else if ((RenewalDate.Value - DateTime.Now).TotalDays == 3)
                            MessageBox.Show("Your deadline is 3 days left");
                        else if ((RenewalDate.Value - DateTime.Now).TotalDays == 2)
                            MessageBox.Show("Your deadline is 2 days left");
                        else if ((RenewalDate.Value - DateTime.Now).TotalDays == 1)
                            MessageBox.Show("Your deadline is 1 days left");

但它不起作用。我不知道为什么。有任何想法吗?提前致谢。我的代码如下:

private int _OrganisationID = 1;
private DateTime? _RenewalDate;

public event PropertyChangedEventHandler PropertyChanged;

[Required(ErrorMessage = "OrganisationID is required.")]
public int OrganisationID
{
    get { return _OrganisationID; }
    set
    {
        if (_OrganisationID == value)
            return;

        _OrganisationID = value;
        PropertyChanged(this, new PropertyChangedEventArgs("OrganisationID"));
    }
}


[Required(ErrorMessage = "RenewalDate is a required field.")]
public DateTime? RenewalDate
{
    get { return _RenewalDate; }
    set
    {

        _RenewalDate = value;

        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs("RenewalDate"));
        }
    }
}


DispatcherTimer timer = new DispatcherTimer();
//  DateTime myDeadLine = new DateTime();
public void InitTimer()
{
    // Checks every minute
    timer.Interval = new TimeSpan(0, 1, 0);
    timer.Tick += timer_Tick;
    timer.Start();
}

void timer_Tick(object sender, EventArgs e)
{
    //if (( RenewalDate.Value - DateTime.Now).TotalDays <= 1)
    //    MessageBox.Show("Your Alert Message");
}

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.Source is TabControl)
    {
        if (ClientDeadLines.IsSelected)
        {
            using (var context = new ProActiveDBEntities())
            {
                var org = context.Organisations.Where(o => o.OrganisationID == this.OrganisationID).FirstOrDefault();

                if (org != null)
                {

                    RenewalDate = org.RenewalDate;

                    if ((RenewalDate.Value - DateTime.Now).TotalDays <= 2)
                        MessageBox.Show("Your Alert Message");
                }
                else
                    {
                    MessageBox.Show("Unable to retrieve data, please set up organsiation first.");
                }
            }

        }
    }
}
4

1 回答 1

2

您甚至尝试过调试此问题吗?在第一行放一个断点:

if ((RenewalDate.Value - DateTime.Now).TotalDays == 5)

什么((RenewalDate.Value - DateTime.Now).TotalDays等于???

((RenewalDate.Value - DateTime.Now).TotalDays可能永远不会相等5,因为TotalDaysdouble. 尝试改用该Days属性。

更新>>>

另外,您是否知道您可以将代码大致重构为以下内容?:

TimeSpan daysRemaining = RenewalDate.Value - DateTime.Now;
if (daysRemaining.Days <= 5) MessageBox.Show(string.Format("Your deadline is {0} days 
away", daysRemaining.Days));
于 2013-08-28T08:04:42.693 回答