注册 登录
编程论坛 VFP论坛

求教关于COMBO控件的使用

fanjinyu9108 发布于 2023-02-24 16:05, 1257 次点击
COMBO控件controlsource属性设置为表A的某字段,rowsource属性设置为表B的某字段,使用时如果从下拉列表中选择后保存,表A的字段内容变为刚才选择内容,但是如果不从下拉列表中选择,而是随便输入一串字符后保存,表A的字段内容不能变为输入的一串字符,请问这个如何解决,我既要下拉选择,又要输入的随意性,请问怎么解决?
14 回复
#2
oldbccn2023-02-24 16:50
帮助看看COMBO的Value与DisplayValue
#3
sdta2023-02-24 20:37
数据输入的随意性,必定会造成输入的数据不规范
#4
mywisdom882023-02-24 22:31
楼主,是想记忆性的输入。
判断输入的,文字,在不在表中,不在就增加到表去
#5
sam_jiang2023-02-25 00:59
不是应该有选择的时候展示选择的值,没有选择时,显示输入的值吗?
#6
fanjinyu91082023-02-25 09:39
sam_jiang师傅,是这样的
#7
sam_jiang2023-02-25 10:28
你上代码,群里高手如云。
#8
sam_jiang2023-02-25 11:52
给你做个示例:
程序代码:

**************************************************
*-- Form:         form1 (d:\documents\visual foxpro 项目\frmcombo.scx)
*-- ParentClass:  form
*-- BaseClass:    form
*-- Time Stamp:   02/25/23 11:45:01 AM
*
DEFINE CLASS form1 AS form


    Top = 0
    Left = 0
    Height = 455
    Width = 683
    DoCreate = .T.
    Caption = "Form1"
    Name = "Form1"


    ADD OBJECT combo1 AS combobox WITH ;
        ControlSource = "", ;
        Height = 24, ;
        Left = 20, ;
        Top = 20, ;
        Width = 100, ;
        Name = "Combo1"


    PROCEDURE combo1.KeyPress &&在combo控件上键入回车,则将combo键的值写入控制数据源
        LPARAMETERS nKeyCode, nShiftAltCtrl
        IF nkeycode=13
            SELECT table2
            GO TOP
            LOCATE FOR ALLTRIM(field2)=ALLTRIM(this.Value)
            IF FOUND() &&是数据源里的数据则添加,否则什么都不做
                SELECT table1
                INSERT INTO table1 (field1) VALUES (this.value)
                brow
            ENDIF
        ENDIF

    ENDPROC


    PROCEDURE combo1.Init
        ON ERROR cancel
        CREATE CURSOR table1 (field1 c(10))
        this.ControlSource="table1"
        CREATE cursor table2 (field2 c(10))
        SELECT table2
        INSERT INTO table2 (field2) VALUES ("aaa")
        INSERT INTO table2 (field2) VALUES ("bbb")
        INSERT INTO table2 (field2) VALUES ("ccc")
        this.RowSourceType = 2
        this.RowSource="table2"
    ENDPROC


    PROCEDURE combo1.DblClick &&在combo控件上双击时调用keypress事件
        this.KeyPress(13)
    ENDPROC


ENDDEFINE
*
*-- EndDefine: form1
**************************************************

#9
fanjinyu91082023-02-26 08:19
只有本站会员才能查看附件,请 登录
我上传了文件,我要实现的目的是不管组合框是选择还是随意输入,都可以存盘到T2表
#10
csyx2023-02-26 09:36
以下是引用fanjinyu9108在2023-2-26 08:19:56的发言:
我要实现的目的是不管组合框是选择还是随意输入,都可以存盘到T2表

Combo1.ControlSource = 't.mm',你要求的确是把录入的内容保存到 Combo1.RowSource 指向的 T2.nn,要求有些奇葩了
#11
sdta2023-02-26 09:59
组合框不要与T表建立关联,否则T表的数据会丢失
在COMBO1的LOSTFOCUS事件中
程序代码:
SELECT T2
LOCATE FOR ALLTRIM(NN)= &&组合框中输入的内容是保存在DISPLAYVALUE中
IF NOT FOUND()
    INSERT INTO T2 VALUES()
ENDIF
#12
fanjinyu91082023-02-26 10:40
我说错了,是存盘到T.nn,就是要T.NN的值随组合框的值改变而改变,现在的情况是如果随意在组合框输入一个列表框没有的字符,t.nn就变成空值了

[此贴子已经被作者于2023-2-26 10:47编辑过]

#13
csyx2023-02-26 10:58
以下是引用fanjinyu9108在2023-2-26 10:40:02的发言:
是存盘到T.nn,就是要T.NN的值随组合框的值改变而改变,现在的情况是如果随意在组合框输入一个列表框没有的字符,t.nn就变成空值了

报告!T表没有nn字段
#14
fanjinyu91082023-02-26 13:22
是T表的MM字段
#15
csyx2023-02-26 14:19
combo1.lostfocus 事件中自己写一句赋值语句就行:
Replace next 1 MM with This.DisplayValue in TT
1