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