标题:表单参数传递的优先级问题
只看楼主
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
以下是引用hfdq在2016-4-27 22:05:26的发言:

参数传递的目的是为了按输入的时间来将另一个表单内的grid里的数据按颜色进行区分
时间小于输入的时间显示为红色
等于这个时间显示为蓝色
其他白色
 
表单1
在text1里输入 日期
local cp
cp=thisform.text1.value
do form 未发货 with cp
 
 
“为发货”表单内的init 代码如下
Lparameters lctr
    this.text1.value=lctr
 
 
grid的init代码
 
local dtime
dtime=thisform.text1.value
 
if empty(dtime)
    thisform.text2.value="空"
else
    thisform.text2.value="有日期"
endif
 
this.SetAll("DynamicBackColor", "IIF(detail.出货时间=dtime, RGB(0,0,255), IIF(detail.出货时间
*表单1
*在text1里输入 日期
local cp
cp=thisform.text1.value
*这里,你要保证你的 cp 是什么类型的,是日期?为了安全,你可以这样做
if type("cp")<>"D"
   messagebox("参数错误,不是日期",16,"错误")
else
   do form 未发货 with cp
endif
*怎么保证 thisform.text1.value 输入的是合法的日期呢?其实最好是把Text1设置为字符,不要设置为日期,然后通过函数转换CTOD()
*先初始化 Text1 为字符,在 Text1.init上写上
this.value=""
*设置 Text1 的输入格式 InputMask = 9999/99/99 ,这样 Text1 就只能输入数字
*然后转换
cp=ctod(thisform.text1.value)
if empty(cp)
   messagebox("日期输入错误",16,"错误")
   return
endif
*经过这样后,就能保证你 cp这个值一定是有效的日期了。
*上面的代码就修改为:

************************************************
*表单1
*在text1里输入 日期
local cp
cp=ctod(thisform.text1.value )
if empty(cp)
   messagebox("参数错误,不是日期",16,"错误")
   return
endif

do form 未发货 with cp

 
“为发货”表单内的init 代码如下
Lparameters lctr
if empty(lctr) or type("lctr")<>"D" &&参数为空,或者参数的类型不是日期
   this.text1.value={} &&设置为 空的日期,此时,这里的 Text1 是日期型
else
   this.text1.value=lctr
endif

*把 grid.init全部移动到 form.init 上

local dtime
dtime=thisform.text1.value
 
if empty(dtime)
    thisform.text2.value="空"
else
    thisform.text2.value="有日期"
endif
 
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间=dtime, RGB(0,0,255), IIF(detail.出货时间<dtime, RGB(255,0,0),RGB(255,255,255)))", "Column")



2016-04-30 21:13
hfdq
Rank: 2
等 级:论坛游民
帖 子:58
专家分:20
注 册:2012-1-15
得分:0 
以下是引用mywisdom88在2016-4-30 21:13:00的发言:

*表单1
*在text1里输入 日期
local cp
cp=thisform.text1.value
*这里,你要保证你的 cp 是什么类型的,是日期?为了安全,你可以这样做
if type("cp")<>"D"
   messagebox("参数错误,不是日期",16,"错误")
else
   do form 未发货 with cp
endif
*怎么保证 thisform.text1.value 输入的是合法的日期呢?其实最好是把Text1设置为字符,不要设置为日期,然后通过函数转换CTOD()
*先初始化 Text1 为字符,在 Text1.init上写上
this.value=""
*设置 Text1 的输入格式 InputMask = 9999/99/99 ,这样 Text1 就只能输入数字
*然后转换
cp=ctod(thisform.text1.value)
if empty(cp)
   messagebox("日期输入错误",16,"错误")
   return
endif
*经过这样后,就能保证你 cp这个值一定是有效的日期了。
*上面的代码就修改为:

************************************************
*表单1
*在text1里输入 日期
local cp
cp=ctod(thisform.text1.value )
if empty(cp)
   messagebox("参数错误,不是日期",16,"错误")
   return
endif

do form 未发货 with cp

 
“为发货”表单内的init 代码如下
Lparameters lctr
if empty(lctr) or type("lctr")<>"D" &&参数为空,或者参数的类型不是日期
   this.text1.value={} &&设置为 空的日期,此时,这里的 Text1 是日期型
else
   this.text1.value=lctr
endif

*把 grid.init全部移动到 form.init 上

local dtime
dtime=thisform.text1.value
 
if empty(dtime)
    thisform.text2.value="空"
else
    thisform.text2.value="有日期"
endif
 
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间=dtime, RGB(0,0,255), IIF(detail.出货时间<dtime, RGB(255,0,0),RGB(255,255,255)))", "Column")




真的非常的奇怪

Lparameters lctr
if empty(lctr) or type("lctr")<>"D" &&参数为空,或者参数的类型不是日期
   this.text1.value={} &&设置为 空的日期,此时,这里的 Text1 是日期型
else
   this.text1.value=lctr
endif


local dtime
dtime=thisform.text1.value
 
if empty(dtime)
    thisform.text2.value="空"
else
    thisform.text2.value="有日期"
endif
 
 
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间=dtime, RGB(0,0,255), IIF(detail.出货时间<dtime, RGB(255,0,0),RGB(255,255,255)))", "Column")

这施form 的init的代码

只要将thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间=dtime, RGB(0,0,255), IIF(detail.出货时间<dtime, RGB(255,0,0),RGB(255,255,255)))", "Column")放在form的init就出错,放回grid里虽然没错,但变量又传递不过来
这个真的是百思不得其解

我明天想想办法将程序文档传上去来给大家看看
我看真的要用文档才能说清楚了
2016-05-05 23:13
hfdq
Rank: 2
等 级:论坛游民
帖 子:58
专家分:20
注 册:2012-1-15
得分:0 
Customer.rar (1.87 MB)

附件内为源文件
请帮我看一下问题到底出现在哪里
谢谢
2016-05-08 20:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
local dtime 这个是局部变量,执行完Init就不存在了。
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间=dtime, RGB(0,0,255), IIF(detail.出货时间<dtime, RGB(255,0,0),RGB(255,255,255)))", "Column")
改为这样试试:
local dtime
dtime=thisform.text1.value    假设是字符型
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间="+dtime+", RGB(0,0,255), IIF(detail.出货时间<"+dtime+", RGB(255,0,0),RGB(255,255,255)))", "Column")


[此贴子已经被作者于2016-5-8 22:18编辑过]

2016-05-08 22:17
hfdq
Rank: 2
等 级:论坛游民
帖 子:58
专家分:20
注 册:2012-1-15
得分:0 
以下是引用吹水佬在2016-5-8 22:17:02的发言:

local dtime 这个是局部变量,执行完Init就不存在了。
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间=dtime, RGB(0,0,255), IIF(detail.出货时间<dtime, RGB(255,0,0),RGB(255,255,255)))", "Column")
改为这样试试:
local dtime
dtime=thisform.text1.value    假设是字符型
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间="+dtime+", RGB(0,0,255), IIF(detail.出货时间<"+dtime+", RGB(255,0,0),RGB(255,255,255)))", "Column")


好像还是不行
2016-05-09 20:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
不能照抄
要看dtime实际是表达什么
如:“出货时间”是字符型字段,dtime是字符串表达式,dtime="20:15:11"
detail.出货时间="20:15:11"
可写成:
[detail.出货时间="] + dtime + ["]
2016-05-09 20:54
hfdq
Rank: 2
等 级:论坛游民
帖 子:58
专家分:20
注 册:2012-1-15
得分:0 
以下是引用吹水佬在2016-5-9 20:54:47的发言:

不能照抄
要看dtime实际是表达什么
如:“出货时间”是字符型字段,dtime是字符串表达式,dtime="20:15:11"
detail.出货时间="20:15:11"
可写成:
[detail.出货时间="] + dtime + ["]


均是日期型

主要的疑惑是这句话
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间="+dtime+", RGB(0,0,255), IIF(detail.出货时间<"+dtime+", RGB(255,0,0),RGB(255,255,255)))", "Column")
在grid里面没事
在form就有问题
2016-05-10 20:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 17楼 hfdq
都是D型试试这样:
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间={^"+DTOC(dtime)+"}, RGB(0,0,255), IIF(detail.出货时间<{^"+DTOC(dtime)+"}, RGB(255,0,0),RGB(255,255,255)))", "Column")
2016-05-10 21:22
hfdq
Rank: 2
等 级:论坛游民
帖 子:58
专家分:20
注 册:2012-1-15
得分:0 
以下是引用吹水佬在2016-5-10 21:22:29的发言:

都是D型试试这样:
thisform.grid1.SetAll("DynamicBackColor", "IIF(detail.出货时间={^"+DTOC(dtime)+"}, RGB(0,0,255), IIF(detail.出货时间<{^"+DTOC(dtime)+"}, RGB(255,0,0),RGB(255,255,255)))", "Column")


不出差错码了
不过也没任何效果了


2016-05-12 22:55
csl591
Rank: 4
等 级:贵宾
威 望:10
帖 子:78
专家分:92
注 册:2009-2-5
得分:0 
表单的参数传递是一个重要的手段。
2016-05-13 15:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-464201-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.554596 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved