VB 6.0 - 格式化文本框 "dd/MM/yy"

VB 6.0 - Formating Textbox "dd/MM/yy"

我之前就此提出过问题,但我没有表达出我真正想要的。我有一个文本框,要求用户在其中写一个日期。然后他可以按下按钮并根据其他一些文本框上的条目生成报告。生成报告中的日期采用 "dd/MM/yy".

格式非常重要

我使用这个代码:

Dim a as String
a = Format(Textbox1.text, "dd/MM/yy")

一切正常,除非用户以这种格式输入日期 "dd.MM.yy",例如 15.05.15。发生这种情况时,生成的报告中的日期始终为“30/12/99”。有人能帮我理解为什么会这样吗?

编辑:关于重复问题。在上一个问题中,我询问了如何从文本框中提取字符并以我想要的格式形成日期。这个问题是关于在始终打印特定日期 (30/12/99) 的文本框 (dd.MM.yy) 中使用特定类型的格式时发生的特定问题。

30/12/1899 是相当于 0 的日期,这是当您尝试将日期格式不正确的 String 转换为 Date 时得到的结果。

要验证这一点,请在您的文本框中输入任何旧垃圾,您将得到 30/12/99 作为输出。

关于使用 DateTimePicker 控件,请参阅我对您其他问题的回答 here

您可以在文本框中选择允许使用的键。

例如如下:

'1 form with:
'  1 textbox : name=Text1

Option Explicit

Private Sub Text1_KeyPress(KeyAscii As Integer)
'  Caption = CStr(KeyAscii)
  KeyAscii = DateOnly(KeyAscii)
End Sub

Private Function DateOnly(intKey As Integer) As Integer
  Dim intResult As Integer
  intResult = intKey
  Select Case intKey
    Case vbKeyBack        'allow backspace
    Case vbKey0 To vbKey9 'allow numbers
    Case 45               'allow -
'    Case 46               'change . into /
'      intResult = 47
    Case 47               'allow /
    Case Else             'dont allow anything else
      intResult = 0
  End Select
  DateOnly = intResult
End Function

这只是限制了用户可以输入哪些键,其他无效的输入你还是要注意

[编辑]

我在上面的代码中添加了 Case 45

在 select 的情况下,您指定每个键输入会发生什么:

  • 您允许不指定任何内容来更改密钥,就像我对 /(ascii 值 47)所做的那样
  • 您可以像我对 . (ascii 值 46)
  • 你可以通过将其设置为 0 来拒绝键输入,就像我对所有其他键所做的那样(其他情况)

您可以通过取消注释 Text1_KeyPress 中的第一行来找出特定键具有哪个 ascii 值,因此 ascii 值将以 caption

的形式显示

IsDate函数也很有用。这将检查输入的日期是否有效,如果是 return 则为真。

IsDate ("21/05/2015")   'returns 'True'
IsDate ("21.05.2015")   'returns 'False'

您可以使用 Replace 函数来更改“.”到“/”

mydate = Replace("21.05.2015", ".", "/")   ' gives "21/05/2015"