Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/vb6/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb6 VB 6.0-格式化文本框“;年月日;_Vb6 - Fatal编程技术网

Vb6 VB 6.0-格式化文本框“;年月日;

Vb6 VB 6.0-格式化文本框“;年月日;,vb6,Vb6,我之前对此提出过一个问题,但我没有表达我真正想要的。我有一个文本框,要求用户在其中写入日期。然后他可以按下一个按钮,根据其他一些文本框上的条目生成一份报告。生成的报告中的日期必须采用“dd/MM/yy”格式,这一点非常重要 我使用以下代码: Dim a as String a = Format(Textbox1.text, "dd/MM/yy") 除了用户以这种格式“dd.MM.yy”键入日期(例如15.05.15)外,一切正常。发生这种情况时,生成的报告中的日期始终为“30/12/99”。有

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

我使用以下代码:

Dim a as String
a = Format(Textbox1.text, "dd/MM/yy")
除了用户以这种格式“dd.MM.yy”键入日期(例如15.05.15)外,一切正常。发生这种情况时,生成的报告中的日期始终为“30/12/99”。有人能帮我理解为什么会这样吗


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

30/12/1899是0的日期等价物,这是当您尝试将日期格式不正确的
字符串转换为
日期时得到的结果

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


关于使用
日期时间选择器
控件,请参阅我对您的其他问题的回答

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

例如:

'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来拒绝键输入,就像我对所有其他键(case-else)所做的那样

您可以通过取消对Text1_KeyPress中第一行的注释来找出特定键的ascii值,这样ascii值将显示在标题中。IsDate函数也很有用。这将检查输入的日期是否有效,如果有效,则返回True

IsDate ("21/05/2015")   'returns 'True'
IsDate ("21.05.2015")   'returns 'False'
您可以使用“替换”功能将“.”更改为“/”


可能重复的问题,请不要在几个小时后发布相同的问题。关于重复的问题。在上一个问题中,我问如何从文本框中提取字符,并以我想要的格式形成日期。这个问题是关于在文本框(dd.MM.yy)中使用特定类型的格式时发生的一个特定问题,该文本框总是打印特定的日期(1999年12月30日)。它可能看起来像两个不同的问题,但答案相同-不允许用户输入无效的日期格式,请看我对你的另一个问题的回答。不幸的是,这里没有回答我的问题。我在问为什么会出现99年12月30日而不是键入的日期。使用datetimepicker输入日期而不是文本框,这样你就不必担心格式问题了。谢谢你的回答。这似乎是做我想做的事情的一个很好的方式。你能告诉我如何允许“-”字符吗?我编辑了我的代码示例,添加了“-”字符,并在我的帖子中添加了一个小说明。我搜索了Ascii表,发现了我是如何做到这一点的。为了消除用户使用“/”以外的其他符号的可能性,我将您的代码更改为将每个符号都更改为“/”,现在它工作得非常好。感谢您的输入Hrqls。做得好。。。但要小心,因为用户可能会输入错误的日期,如“31/31/31”或“0/0/0”或“//”或“12/5”或其他任何内容
mydate = Replace("21.05.2015", ".", "/")   ' gives "21/05/2015"