从日期输入面板格式化日期
Formatting Date From A Date Input Panel
我有一个用户界面可以通过输入面板输入日期。我正在构建面板,如下所示。这是一个 DATEPANEL,因此它会自动添加输入掩码(正斜杠,例如 mm/dd/yyyy):
RepurchaseDatePanel = oMstrCmp.AddPanel(DATEPANEL)
oMstrCmp.AddMessage RepurchaseDatePanel,"SALE/REPURCH/MNT Date"
If IsDate(strRepurchaseDate) Then
oMstrCmp.AddItems RepurchaseDatePanel, strRepurchaseDate
End If
oMstrCmp.MoveVertDivider RepurchaseDatePanel, 75
oMstrCmp.Panels(RepurchaseDatePanel).CaptionFont.Style = 1
然后,我从面板中抓取文本并按如下方式全局定义字符串:
strRepurchaseDate = oMstrCmp.GetText(RepurchaseDatePanel)
strRepurchaseDate = Left(strRepurchaseDate,2) + "/" +Mid(strRepurchaseDate,3,2) + "/" + Right(strRepurchaseDate,2)
接下来,我将尝试将该日期以 MMDDYY 格式输入到 3270 模拟器屏幕上。日期面板的格式是 MM/DD/YYYY,我正在尝试将其格式化为 MMDDYY 格式以适合屏幕。以下是我尝试在屏幕上输入它的方式:
subMoveCursor 11, 10
If (InStr(1, Trim(strRepurchaseDate), "/") <> 0) Then
strHold_Date = funcFormatDate(strRepurchaseDate)
subPressKey "@F"
subEnterData strHold_date
End If
我正在使用 funcFormatDate 将面板中的日期从 MM/DD/YYYY 格式格式化为 MMDDYY 格式。下面是 funcFormatDate:
Function funcFormatDate(strRepurchaseDate)
Dim strhld_mm
Dim strhld_dd
Dim strhld_yy
Dim nMM_pos
Dim nDD_len
Dim nDD_pos
nMM_pos = InStr(1,strRepurchaseDate,"/")
strhld_mm = Left(strRepurchaseDate,nMM_pos - 1)
strhld_mm = Right("00" & strhld_mm,2) ' zero fill field upt to 2 pos
nDD_pos = InStr(nMM_pos + 1,strRepurchaseDate,"/")
nDD_len = (nDD_pos - nMM_pos) - 1
strhld_dd = Left(strRepurchaseDate,nDD_pos - 1)
strhld_dd = Mid(strRepurchaseDate,nMM_pos + 1, nDD_len)
strhld_dd = Right("00" & strhld_dd,2) ' zero fill field upt to 2 pos
strhld_yy = Right(strRepurchaseDate,2)
funcFormatDate = strhld_mm & strhld_dd & strhld_yy
End Function
然而,我得到的结果是“0000//”。当我输入“08/13/2018”时,我总是得到结果“0000//”,就好像该功能正在运行一样,但我不是 "getting" 面板中的文本。我无法从面板获取实际文本以在屏幕上写入“081318”,每次它都会给我“0000//”。
有人可以帮忙吗?
所以,我成功了。这个问题很简单,而且我不知道。我全局定义了变量 strRepurchaseDate,它也在我的函数中定义以创建用户界面。无论出于何种原因,它都不能同时在函数中和全局定义。我只是从创建用户界面的函数中删除了变量,它就起作用了。所以 funcFormatDate 可以在使用 DATEPANEL 时重新格式化日期。谢谢你的协助。
我有一个用户界面可以通过输入面板输入日期。我正在构建面板,如下所示。这是一个 DATEPANEL,因此它会自动添加输入掩码(正斜杠,例如 mm/dd/yyyy):
RepurchaseDatePanel = oMstrCmp.AddPanel(DATEPANEL)
oMstrCmp.AddMessage RepurchaseDatePanel,"SALE/REPURCH/MNT Date"
If IsDate(strRepurchaseDate) Then
oMstrCmp.AddItems RepurchaseDatePanel, strRepurchaseDate
End If
oMstrCmp.MoveVertDivider RepurchaseDatePanel, 75
oMstrCmp.Panels(RepurchaseDatePanel).CaptionFont.Style = 1
然后,我从面板中抓取文本并按如下方式全局定义字符串:
strRepurchaseDate = oMstrCmp.GetText(RepurchaseDatePanel)
strRepurchaseDate = Left(strRepurchaseDate,2) + "/" +Mid(strRepurchaseDate,3,2) + "/" + Right(strRepurchaseDate,2)
接下来,我将尝试将该日期以 MMDDYY 格式输入到 3270 模拟器屏幕上。日期面板的格式是 MM/DD/YYYY,我正在尝试将其格式化为 MMDDYY 格式以适合屏幕。以下是我尝试在屏幕上输入它的方式:
subMoveCursor 11, 10
If (InStr(1, Trim(strRepurchaseDate), "/") <> 0) Then
strHold_Date = funcFormatDate(strRepurchaseDate)
subPressKey "@F"
subEnterData strHold_date
End If
我正在使用 funcFormatDate 将面板中的日期从 MM/DD/YYYY 格式格式化为 MMDDYY 格式。下面是 funcFormatDate:
Function funcFormatDate(strRepurchaseDate)
Dim strhld_mm
Dim strhld_dd
Dim strhld_yy
Dim nMM_pos
Dim nDD_len
Dim nDD_pos
nMM_pos = InStr(1,strRepurchaseDate,"/")
strhld_mm = Left(strRepurchaseDate,nMM_pos - 1)
strhld_mm = Right("00" & strhld_mm,2) ' zero fill field upt to 2 pos
nDD_pos = InStr(nMM_pos + 1,strRepurchaseDate,"/")
nDD_len = (nDD_pos - nMM_pos) - 1
strhld_dd = Left(strRepurchaseDate,nDD_pos - 1)
strhld_dd = Mid(strRepurchaseDate,nMM_pos + 1, nDD_len)
strhld_dd = Right("00" & strhld_dd,2) ' zero fill field upt to 2 pos
strhld_yy = Right(strRepurchaseDate,2)
funcFormatDate = strhld_mm & strhld_dd & strhld_yy
End Function
然而,我得到的结果是“0000//”。当我输入“08/13/2018”时,我总是得到结果“0000//”,就好像该功能正在运行一样,但我不是 "getting" 面板中的文本。我无法从面板获取实际文本以在屏幕上写入“081318”,每次它都会给我“0000//”。
有人可以帮忙吗?
所以,我成功了。这个问题很简单,而且我不知道。我全局定义了变量 strRepurchaseDate,它也在我的函数中定义以创建用户界面。无论出于何种原因,它都不能同时在函数中和全局定义。我只是从创建用户界面的函数中删除了变量,它就起作用了。所以 funcFormatDate 可以在使用 DATEPANEL 时重新格式化日期。谢谢你的协助。