自定义录入界面之四

本节的内容可以参考CaseStudy目录下的文件:自定义录入界面之四.Table

前面的自定义录入界面都是针对表的,这次针对窗口,可以在下拉输入框中输入内容进行模糊筛选,找出可能的客户供选择, 还可以直接在下拉窗口中增加或删除用户:

设计步骤

一、设计下拉窗口

1、首先在订单表新增一个窗口,名称为“窗口1”,窗口类型为"DropDownForm",窗口插入一个Table控件,Table控件的“作为副本”属性设置为True,“允许编辑”属性设置为False,并绑定到客户表。

2、将窗口的DropDownOpened事件代码设置为:

Dim txt As String = e.Form.DropDownBox.Text
Dim
tbl As Table = Tables("窗口1_Table1")
If
txt = "" Then
   
tbl.Filter = ""
Else

    txt =
"'%" & txt & "%'"
    tbl.Filter =
"客户ID Like " & txt & " Or 公司名称 Like " & txt & " Or 地址 Like " & txt & " Or 联系人 Like " & txt
End
If
e.Form.DropDownBox.
Select()
'将输入焦点返回下拉列表框

这样下拉窗口显示后,会自动根据下拉列表框的内容,筛选出可能的客户,并将输入焦点返回到下拉列表框(这是很关键的一步)。

3、将Table控件的DoubleClick事件代码设置为:

Forms("窗口1").DropDownBox.CloseDropDown()

这样在下拉窗口双击某个客户,就会关闭下拉窗口。

4、将Table控件的KeyDown事件代码设置为:

If e.KeyCode = Keys.Enter Then
    Forms(
"窗口1").DropDownBox.CloseDropdown()
End
If

这样在下拉窗口中选择某个客户,然后按回车键,也会关闭下拉窗口。

5、将窗口的DropDownClosed事件代码设置为:

If e.Selected Then '如果选择了值
    Dim tbl As Table = Tables("窗口1_Table1")
    If tbl.Current IsNot Nothing Then
        e.Form.DropDownBox.Value = tbl.Current("客户ID")
    End If
    If e.Form.DropTable IsNot Nothing Then '如果是通过表下拉的
        e.Form.DropTable.FinishEditing()
    Else '如果是通过窗口下拉的
        e.Form.DropDownBox.WriteValue()
    End If

End
If

这样关闭下拉窗口后,可以自动将选定客户的客户ID输入到下拉列表框中。

6、将窗口的“增加客户”按钮的Click事件代码为:

e.Form.DropDownBox.CloseDropdown(False)
Dim
r As Row = Tables("客户").AddNew()
Forms(
"客户编辑").Open()
r.Save()
e.Form.DropDownBox.Value = r(
"客户ID"
)

这样单击“增加用户”按钮,可以增加一个用户,并打开“客户编辑”窗口编辑新增客户的资料,编辑完成后,会自动将新增客户的客户ID写入下拉列表中。
请使用上述代码之前,先在客户表建立一个“客户编辑”窗口,此窗口的设计就不再啰嗦了,记得将这个窗口的类型设置为模式窗口就行。
需要注意的是,上面的代码
CloseDropDown方法使用了参数False,这样关闭下拉窗口后,DropdownClosed事件的e参数Selected等于False,这样就只是简单地关闭窗口,不会向下拉列表框写入值。

7、将窗口的“删除用户”按钮的Click事件代码设置为:

Dim r As Row = Tables("窗口1_Table1").Current
If
r IsNot Nothing Then
    r.Delete()

End
If

二、设计录入窗口

1、新建一个录入窗口,插入一个DropDownBox控件,将其下拉窗口设置为“窗口1”。

2、将DropDownBox的KeyPress事件代码设置为:

Dim drp As WinForm.DropDownBox = e.Sender
If
drp.DroppedDown = False '如果下拉窗口没有打开
    drp.OpenDropDown()
'打开下拉窗口
End
If

这样一旦开始在下拉列表框中输入内容,就能自动打开打开下拉窗口。

3、将DropDownBox的TextChanged事件代码设置为:

Dim drp As WinForm.DropDownBox = e.sender
If
drp.DroppedDown Then '如果下拉窗口已经打开
    Dim tbl As Table = Tables("窗口1_Table1")
    If
drp.Text = "" Then '如果内容为空
        tbl.Filter = ""
'显示所有客户
   
Else '否则根据输入内容进行模糊筛选
       
Dim txt As String = "'%" & drp.Text & "%'"
        tbl.Filter =
"客户ID Like " & txt & " Or 公司名称 Like " & txt & " Or 地址 Like " & txt & " Or 联系人 Like " & txt
    End
If
End
If

这样就能根据用户在下拉列表框输入的内容,动态筛选出可能的客户。

4、将DropDownBox的KeyDown事件代码设置为:

Dim drp As WinForm.DropDownBox = e.sender
If
drp.DroppedDown Then '如果下拉窗口已经打开
    Dim tbl As Table = Tables("窗口1_Table1")
    If
e.KeyCode = Keys.Up Then '如果按下的是上箭头按键
        tbl.Position = tbl.Position -
1 '向上移动一行
        e.Cancel =
True
    ElseIf
e.KeyCode = Keys.Down Then '如果按下的是下箭头按键
        tbl.Position = tbl.Position +
1 '向下移动一行
        e.Cancel =
True
    End
If
End
If

这样用户在下拉列表框输入内容的同时,还可以通过上下箭头按键来选择客户。

5、将DropDownBox的Validating事件代码设置为:

Dim drp As WinForm.DropDownBox = e.sender
If
drp.DroppedDown Then '如果下拉窗口已经打开
    drp.CloseDropdown(False) '关闭下拉窗口

End
If

这样就能确保输入焦点离开DropDownBox后,下拉窗口能自动关闭。

 


本页地址:http://www.foxtable.com/webhelp/topics/2466.htm