gpt4 book ai didi

c# - 覆盖方法调用,使其在特定情况下不被调用

转载 作者:太空宇宙 更新时间:2023-11-03 18:32:04 25 4
gpt4 key购买 nike

对于奇怪的主题措辞,我深表歉意。

我有两个日期选择器,一个只接受数值的持续时间文本框,以及两个用于 SelectedDateChanged 和 Text_TextChanged 的​​方法。

我想做的是 MS Project 对他们的开始日期/结束日期/持续时间所做的事情(如果有人对此有任何了解)但基本上,用户可以输入 3 个中的 2 个,它将填充另一个一个相应的。因此,如果我在文本框(天)中输入 3,并在我的结束日期 DatePicker 中选择 12/10/2013,我的 2 个对象应该说开始日期 - 12/10/2013 End日期 - 12/13/2013 文本 3

这是我的 2 个 datePicker 方法背后的代码。

    private void DatePickerEndDate1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
if(!String.IsNullOrWhiteSpace(DatePickerEndDate1.ToString()))
newEndDate = DateTime.Parse(DatePickerEndDate1.ToString());
if (!String.IsNullOrWhiteSpace(DatePickerEndDate1.ToString()) && !String.IsNullOrWhiteSpace(DatePickerStartDate1.ToString()))
{
if (DatePickerEndDate1.SelectedDate < DatePickerStartDate1.SelectedDate)
{
DatePickerStartDate1.SelectedDate = DatePickerEndDate1.SelectedDate;
DatePickerEndDate1.SelectedDate = originalStartDate;
}

TimeSpan differenceBetweenStartandEndDate = newEndDate.Subtract(newStartDate);
TextDuration.Text = differenceBetweenStartandEndDate.Days.ToString();
}
else if (DatePickerEndDate1.SelectedDate != null && DatePickerStartDate1.SelectedDate == null)
{
DatePickerStartDate1.SelectedDate = newEndDate;
DatePickerEndDate1.SelectedDate = newEndDate.AddDays(taskLength);
}
}

private void DatePickerStartDate1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
if(!String.IsNullOrWhiteSpace(DatePickerStartDate1.ToString()))
newStartDate = DateTime.Parse(DatePickerStartDate1.ToString());
if (!String.IsNullOrWhiteSpace(DatePickerEndDate1.ToString()) && !String.IsNullOrWhiteSpace(DatePickerStartDate1.ToString()))
{
if (DatePickerStartDate1.SelectedDate > DatePickerEndDate1.SelectedDate)
{
DatePickerEndDate1.SelectedDate = DatePickerStartDate1.SelectedDate;
DatePickerStartDate1.SelectedDate = originalEndDate;
}


TimeSpan differenceBetweenStartandEndDate = newEndDate.Subtract(newStartDate);
TextDuration.Text = differenceBetweenStartandEndDate.Days.ToString();
}
else if (DatePickerStartDate1.SelectedDate != null && DatePickerEndDate1.SelectedDate == null)
{
DatePickerEndDate1.SelectedDate = newEndDate;
DatePickerStartDate1.SelectedDate = newEndDate.AddDays(taskLength);
}

}

当我在 Else if 方法中重置说 DatePickerStartDate1(对于此实例)时,我正在调试并意识到我的错误。这会重新触发我的 DatePickerEndDate1,因为它正在被更改,这也会调用我的 TextDuration_TextChanged。

    private void TextDuration_TextChanged(object sender, TextChangedEventArgs e)
{
if(int.TryParse(TextDuration.Text, out taskLength))

if (DatePickerStartDate1.SelectedDate != null)
{
DatePickerEndDate1.SelectedDate = newStartDate.AddDays(taskLength);
}
else if (DatePickerEndDate1.SelectedDate != null)
{
DatePickerStartDate1.SelectedDate = newEndDate.AddDays(taskLength);
}
}

它正在触发它,它会将我的 taskLength 重置为 0,并最终将所有日期设置为 12/10/2013,因为它从未添加 3 天。

现在我想知道我是否可以编写一行代码,当且仅当我在那个 else if 中时才不会调用该方法?

最佳答案

您正试图在 UI 中执行业务逻辑,但它很乱
如果您使用日期选择器以外的其他东西更改日期,不仅会造成困惑而且会失败
Binding、get、set 和 NotifyPropertyChanged 是你的 friend

private DateTime? date1;
private DateTime? date2;
private Int32? taskLength;

public DateTime? Date1
{
get { return date1; }
set
{
if (date1 == value) return;
date1 = value;
NotifyPropertyChanged("Date1");
if (taskLength != null && date1 != null)
{
date2 = date1.AddDays(taskLength);
// by calling the backing property you don't hit the set
NotifyPropertyChanged("Date2");
// anything bound will call the get
}
}
}

关于c# - 覆盖方法调用,使其在特定情况下不被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20859527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com