以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  自定义项目能做判断是否存在吗?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2286)

--  作者:mr725
--  发布时间:2009/4/4 16:48:00
--  自定义项目能做判断是否存在吗?
我在窗口中combobox控件的属性列表项目采用自定义项目(允许手工输入)时,当选择后不小心按了某按键删除(或加上)了个别字符后,关闭窗口时出现错误提示~ 
能不能加个判断,如果自定义项目中不存在的时候,提示没有该项目,而不是由系统弹出错误提示呢?
[此贴子已经被作者于2009-4-4 19:04:12编辑过]

--  作者:czy
--  发布时间:2009/4/4 18:20:00
--  
肯定可以的,来个示例文件吧,或将窗口模板传上来看看。
--  作者:mr725
--  发布时间:2009/4/4 19:09:00
--  
关闭 按钮 代码:
Dim xm As DataRow  = DataTables("项目表").Find("项目代码 = \'" & e.Form.Controls("combobox1").text.SubString(0,4) & "\'")
            if xm.isnull("项目代码") then
                e.Form.Controls("combobox1").value = ""
                e.Form.Controls("ComboBox1").Select() 
            else
            Dim Multi As string = e.Form.Controls("combobox1").text
            Dim Values as String()
                Values = Multi.split(" ")
                dim ss1 as string = (Values(1))
                Tables("pzbj").Current("项目") = ss1 
            e.form.Close()           
            end if

项目格式是:
1001 项目1|1002 项目2|  .........
其中1001等是和项目表中的项目代码一致的。          其他也没什么代码的。 还有1楼应是手工允许直接录入

今天论坛网页一直有问题,时断时续的。。。。。。。。
[此贴子已经被作者于2009-4-4 19:11:32编辑过]

--  作者:czy
--  发布时间:2009/4/4 19:32:00
--  
改成这样看看。

Dim xm As DataRow  = DataTables("项目表").Find("项目代码 = \'" & e.Form.Controls("combobox1").text.SubString(0,4) & "\'")
If xm Is Nothing Then
    e.Form.Controls("combobox1").value = ""
    e.Form.Controls("ComboBox1").Select()
else
    Dim Multi As string = e.Form.Controls("combobox1").text
    Dim Values as String()
    Values = Multi.split(" ")
    dim ss1 as string = (Values(1))
    Tables("pzbj").Current("项目") = ss1
    e.form.Close()
end if

--  作者:mr725
--  发布时间:2009/4/4 19:38:00
--  
知道了,是‘1001 项目1’中间的空格造成的,所以要判断空格是否存在!~
有时输入完1001后,项目 ‘1001 项目1 ’自动全部进入控件,这时比如敲回车不小心多触到小数点‘.’这样那个空格就没有了,项目1也被小数点清掉了,只剩下 1001.  ,代码中的Values = Multi.split(" ") 就失灵了,
就会出现错误提示

现在要求增加一个判断,点击关闭按钮时,如果自定义项目中没有控件中的内容的话,就返回控件重新输入,该怎么做???
--  作者:czy
--  发布时间:2009/4/4 19:40:00
--  
测试一下四楼的代码,看看能不能解决?
--  作者:mr725
--  发布时间:2009/4/4 19:57:00
--  
诶~  czy版主的 If xm Is Nothing Then 比我的 if xm.isnull("项目代码") then 要好(因为我的项目代码中有几行确实是空值,是必须保留的空值) ! 谢谢了。

不过我5楼说的还是会发生问题的。还要加上是否有空格的判断和自定义项目中没有控件中的内容 的判断,因为允许直接输入,可能会超出自定义内容
--  作者:mr725
--  发布时间:2009/4/4 20:13:00
--  
czy版主:请看5、7楼。

今天不知我这里网络有点问题还是论坛的问题,总是时断时续的。。。。。。。。
--  作者:狐狸爸爸
--  发布时间:2009/4/4 21:09:00
--  

Validating

离开控件之前执行,通常用于验证控件的内容。

e参数属性:

Sender:返回触发事件的控件
Form:   返回控件所在的窗口

Cancel: 逻辑型,设为True禁止离开控件。

示例

如果将某个DateTimePicker(日期输入框)的Validating事件设置为:

If e.Sender.Value Is Nothing Then
    e.Cancel =
True
End
If

这样直到你在该DateTimePicker中输入内容,否则你将不能离开它去选择其他控件。

但是验证也有例外的时候,例如窗口中通常有一个取消按钮,单击这个按钮,最好不用执行任何控件的Validating事件,否则我明明需要取消操作,却还得在取消之前还得输入一些内容,这不符合通常的操作习惯。为解决这个问题,只需在窗口设计的时候,将这个按钮的"执行验证"属性设为False即可,该属性位于“行为”分组中。


--  作者:mr725
--  发布时间:2009/4/4 22:02:00
--  

空格判断解决了,
Dim xm As DataRow  = DataTables("项目表").Find("项目代码 = \'" & e.Form.Controls("combobox1").text.SubString(0,4) & "\'")
If xm Is Nothing Then
    e.Form.Controls("combobox1").value = ""
    e.Form.Controls("ComboBox1").Select()
else

if e.Form.Controls("combobox1").text.SubString(4,1) <> " " then 
                e.Form.Controls("ComboBox1").Select() 
                e.Form.Controls("combobox1").value = "" 

else
    Dim Multi As string = e.Form.Controls("combobox1").text
    Dim Values as String()
    Values = Multi.split(" ")
    dim ss1 as string = (Values(1))
    Tables("pzbj").Current("项目") = ss1
    e.form.Close()
end if

end if

下面是如何判断控件中的内容是否包含在自定义项目中,如果没有的话也不让关闭窗口,这个不会做啊~
是不是在自定义项目中开头或结尾处加 "|" 呀,试了几遍都不成功。 

另外,狐爸呀~ 你9楼说的帮助我也看过,好像和我要的东东不大嘎呀! 我是在窗口关闭前才将控件中的内容写到指定位置的。问题是有些在自定义中没有的内容也可以写到指定位置的。


[此贴子已经被作者于2009-4-4 22:02:38编辑过]