【问题标题】:How to add 1 month to selected DateTimePicker如何将 1 个月添加到选定的 DateTimePicker
【发布时间】:2015-12-09 07:13:41
【问题描述】:

我在使用 DateTimePicker 时遇到问题。

我目前正在尝试做的是基于 lblPrevSem(Previous Semester) 中的文本,它是从前一个屏幕上的下拉列表中获取它的选择,我想向 DateTimePicker 添加一定的时间.

Public Property CustomFormat As String
Dim SemesterMonths As Integer
Dim SemesterDays As Integer


Private Sub DeptCreatePrevSch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim SemesterYear() As String = DeptPrevSch.CboSem.Text.Split(",")


    lblPrevSem.Text = SemesterYear(0)
    cboYear.Text = Date.Now.Year
    For i As Integer = 0 To 5
        cboYear.Items.Add(Date.Now.Year + i)
        cboYear.SelectedIndex = 0
    Next

    If InStr(lblPrevSem.Text, "Fall") Then
        SemesterMonths = 1
    ElseIf InStr(lblPrevSem.Text, "Spring") Then
        SemesterMonths = 1
    ElseIf InStr(lblPrevSem.Text, "Summer") Then
        SemesterDays = 14
    End If

    Call dtpStart_ValueChanged(sender, e)
End Sub

Private Sub dtpStart_ValueChanged(sender As Object, e As EventArgs) Handles dtpStart.ValueChanged

    Dim StartDate As Date
    Dim StartStringDate As String
    Dim EndDate As Date
    Dim EndStringDate As String


    dtpStart.Format = DateTimePickerFormat.Custom
    dtpStart.CustomFormat = "MMMM dd, yyyy  dddd"

    StartDate = dtpStart.Value.ToString
    StartStringDate = StartDate.ToString("MMMM dd, yyyy  dddd")
    lblRegStartDate.Text = StartStringDate

    EndDate = dtpStart.Value.AddMonths(SemesterMonths)
    EndDate = dtpStart.Value.AddDays(SemesterDays)
    EndStringDate = EndDate.ToString("MMMM dd, yyyy  dddd")
    lblRegEndDate.Text = EndStringDate

End Sub

我可以让它在几天内添加,但是当我尝试在 1 个月内添加时,它似乎根本不起作用。

我在 1 个月内尝试了多种不同的添加方式,但到目前为止没有任何效果。我在 30 天内添加了壁橱,但这并没有考虑到有 31 天的月份。

Reg Start Date 是 DateTimePicker,Reg End Date 应该是基于 lblPrevSem 的添加天数

注册开始/结束日期都显示为标签

(即秋季 = 1 个月,春季 = 1 个月,夏季 = 2 周)

【问题讨论】:

  • 首先,以这种方式调用事件是一个非常糟糕的主意,事件应该指示用户交互。把代码放在一个方法中可以从任何地方调用它。 Dim StartDate As Date ... = dtpStart.Value.ToString 让我觉得 Option Strict 没有打开。其中一些 dtp 属性可以在设计器中设置一次,而不是在方法中一遍又一遍地设置
  • 我不知道这些可以在设计器中设置?
  • 我完全忘记了设置选项严格。好吧,所有这些工作都白费了......然后我想回去工作......谢谢你提醒我。
  • 我说的是 Format 和 CustomFormat——它们真的不需要在每次值改变时都设置。您可以将 Option Strict 设置为永久默认值:工具 -> 项目和解决方案 -> VB 默认值。为这个项目设置它:项目属性 -> 编译选项卡/页面
  • 感谢您的提示。幸运的是我只需要重做这个表格。很多工作都是徒劳的......讨厌那个

标签: vb.net datetimepicker


【解决方案1】:

您的问题是您在添加 SemesterMonths 值后重置 EndDate 的值。您应该将 SemesterDays 值添加到 EndDate 变量中,而不是使用 dtpStart.Value.AddDays(SemesterDays) 重置 EndDate 的值:

EndDate = dtpStart.Value.AddMonths(SemesterMonths)
EndDate = EndDate.AddDays(SemesterDays)

【讨论】:

  • 谢谢,在我重写所有这些后我会仔细研究一下,因为我忘了像白痴一样严格地设置选项
【解决方案2】:

只需获取 datetimepicker 值并将 .AddYears(0) 或 .AddDays(0) 或 AddMonths(0) 放在它后面。
但您也可以同时使用它们。

nextServiceDateTimePicker.Value.AddYears(0).AddDays(0).AddMonths(0);

只需将 0 替换为 i 并为其赋予所需的值。

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多