首页 > 解决方案 > 创建一个数组来存储日期值 (dd/mm/yyyy)

问题描述

您将如何创建具有日期值的数组并将其存储为格式 (dd/mm/yyyy)。目前,我还得到了时间以及输入的日期。我的目标是将一个人的出生日期存储在学生数据库中。是否也可以将 DOB 限制在今天之前?

Public Class frmStudentDB
Dim CurrentIndex As Integer
Dim StudentName(20) As String
Dim StudentMark(20) As Integer
Dim StudentDOB(20) As Date = StudentDOB.ToString("dd/MM/yyyy")
Dim MyFormat As String = "{0, -20}{1,-10}{2,4}"

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
    Dim Name As String
    Dim DOB As Date
    Dim Mark As Integer

    If CurrentIndex = 20 Then
        MsgBox("The array is FULL!")
    ElseIf txtName.Text = "" Or txtDOB.Text = "" Or txtMark.Text = "" Then
        MsgBox("Please fill in the fields as they cannot be left empty")
    ElseIf (IsNumeric(txtMark.Text)) = False Then
        MsgBox("Please enter a number for mark.")
    ElseIf (Integer.Parse(txtMark.Text) > 100) Or (Integer.Parse(txtMark.Text) < 1) Then
        MsgBox("Mark has to be between 1-100")
    Else
        Name = txtName.Text
        CurrentIndex = CurrentIndex + 1
        StudentName(CurrentIndex) = Name
        txtName.Clear()

        DOB = txtDOB.Text
        CurrentIndex = CurrentIndex + 1
        StudentDOB(CurrentIndex) = DOB
        txtDOB.Clear()

        Mark = txtMark.Text
        CurrentIndex = CurrentIndex + 1
        StudentMark(CurrentIndex) = Mark
        txtMark.Clear()

        txtName.Focus() 'Position cursor for input of next student's name
        lstOutput.Items.Add(String.Format(MyFormat, Name, DOB, Mark))
    End If

End Sub



Private Sub frmStudentDB_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    CurrentIndex = -1
    lstOutput.Items.Add(String.Format(MyFormat, "Name", "DOB", "Mark"))
End Sub

结束类

标签: vb.net

解决方案


首先StudentDOB.ToString(...)返回一个您现在尝试分配给数组的字符串。因为 a StringArray这样做是不可能的。

如果您尝试做的是施加格式限制,那也是不可能的。每次向数组添加一些东西时,您都必须处理它,也就是说,在这一行:

StudentDOB(CurrentIndex) = DOB

因为DOB是一个Date你可以使用你的ToString(...)重载。

其次,您也可以在列表框中获得时间,因为您只传递它DOB,这允许它自己选择格式。相反,您应该将已格式化的字符串传递给它:

lstOutput.Items.Add(String.Format(MyFormat, Name, CurrentDOB(CurrentIndex), Mark))

第三,由于某种原因,您在代码中的不同位置增加CurrentIndex 了三倍。这将导致您的阵列不同步并很快“满”。

在修改所有数组,从 then开始CurrentIndex = 0只增加一次。最好在你打电话后。lstOutput.Items.Add(...)

最后,我建议使用 aDateTimePicker而不是TextBoxfortxtDOB因为它不允许非日期输入。

这也使您可以指定最小和最大允许日期。要将最大日期设置为今天之前,您可以将其放入Form.Load事件中:

dtpDOB.MaxDate = Date.Now.AddDays(-1)

推荐阅读