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

时间:2015-05-20 13:04:46

标签: vb6

我之前提出过一个问题,但我并没有真正表达我的想法。我有一个文本框,要求用户在其中写入日期。然后,他可以按一个按钮,根据其他一些文本框中的条目生成报告。生成的报告中的日期格式为“dd / MM / yy”非常重要。

我使用此代码:

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

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

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

3 个答案:

答案 0 :(得分:4)

30/12/1899是等效于0的日期,这是您尝试将String的格式转换为Date时获得的结果。

要验证这一点,请在文本框中键入任何旧垃圾,然后输出30/12/99。

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

的回答

答案 1 :(得分:2)

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

例如如下:

'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

在选择的情况下,您可以指定每个键输入的内容:

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

您可以通过取消注释Text1_KeyPress中的第一行来找出特定键具有的ascii值,以便ascii值将以表单标题显示

答案 2 :(得分:1)

IsDate 功能也很有用。这将检查输入的日期是否有效,如果是,则返回True。

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

您可以使用替换功能更改“。”到“/”

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