标题:怎样往程序生成的对象中添加“方法程序”
只看楼主
zhangheyuan
Rank: 1
等 级:新手上路
帖 子:74
专家分:4
注 册:2018-5-23
结帖率:85.71%
已结贴  问题点数:10 回复次数:12 
怎样往程序生成的对象中添加“方法程序”
请教高手:
    本人在表格(grid)对象中,使用了check类型的列,在改变数据源的时候Column 中的Header还在,但check类型的丢了,VF6自动添加了Text类型:
this.grid1.recordsource='mx_'+bh99
iia=12
this.grid1.columncount=iia
this.grid1.column12.AddObject('check1','CheckBox')     && 添加复选框    表单中column12 是check1式的控件,改变数据源后,丢了只有用此命令加上。
this.grid1.column12.RemoveObject('text1')              &&这个 Text1 确实存在了!  表单中column12 是check1式的控件,变成了Text1了。
   想在 Column12.Check1.click  中填写代码:在点击check1列时刷新表单,怎么解决这个问题呢?


[此贴子已经被作者于2018-11-27 21:02编辑过]

搜索更多相关主题的帖子: 对象 添加 类型 this text1 
2018-11-26 19:12
zhangheyuan
Rank: 1
等 级:新手上路
帖 子:74
专家分:4
注 册:2018-5-23
得分:0 
想在 Column12.Check1.click  中填写代码:在点击check1列时刷新表单,怎么解决这个问题呢? Colum12中没有Click方法程序,Column12.Check1.click 中有。
我用VF6.0。

[此贴子已经被作者于2018-11-27 20:56编辑过]

2018-11-26 19:43
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:8 
vfp6的话只能先派生checkbox的子类mycheckbox,在mychkeckbox的click中写好刷新代码
然后加它到列 this.grid1.column12.AddObject('check1','MyCheckBox')

vbfp9的话用bindevent就行
this.grid1.column12.AddObject('check1','CheckBox')
bindevent(this.grid1.column12, 'click', thisform, 'refresh', 1)
2018-11-26 20:21
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:0 
若要在运行时改变 Grid.RecordSource,切记:一定要先设置 ColumnCount = -1,如下所示:

this.grid.ColumnCount = -1
this.grid.RecordSource = 'mx_'+bh99
iia=12
this.grid1.columncount=iia
……

泉城飞狐
2018-11-27 10:54
zhangheyuan
Rank: 1
等 级:新手上路
帖 子:74
专家分:4
注 册:2018-5-23
得分:0 
回复4楼:泉城飞狐:谢谢您,为什么ColumnCount=-1 呢? 有什么好处?或避免 白框 什么的吗?
2018-11-27 20:22
zhangheyuan
Rank: 1
等 级:新手上路
帖 子:74
专家分:4
注 册:2018-5-23
得分:0 
回复3楼,cayx:
   我用的VFP6.0  ,怎么用编程的方法派生个mycheckBox子类呢?  或在表单中生产一个MyCheckBox控件?
谢谢!
Define class myCheckBox As CheckBox
  top=0
  left=0
  Height=20
  Wdith=10
  Caption=""
  Procedure Click
   Thisform.refresh
  Endproc
 EndDefine
this.grid1.column12.AddObject('check1','MyCheckBox')
这是样行吗?



[此贴子已经被作者于2018-11-27 21:21编辑过]

2018-11-27 20:35
zhangheyuan
Rank: 1
等 级:新手上路
帖 子:74
专家分:4
注 册:2018-5-23
得分:0 
请高手!

[此贴子已经被作者于2018-11-27 21:20编辑过]

2018-11-27 21:12
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
类定义必须放到类库(vcx)或prg中,可以将
Define class myCheckBox As CheckBox
 ...
EndDefine
放入你的 main.prg 最后,或存放到一个独立的 prg 文件中(里面可以放很多你的自定义类)

然后就可以直接使用了
set classlib to 你的类库.prg additive       && 这句最好放在你的 main.prg 中
this.grid1.column12.AddObject('check1','MyCheckBox')
2018-11-27 22:29
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:2 
设置 ColumnCount = -1 相当于重置表格各列的属性,比如:Alignment、Width、Format、InputMask、Header等,如果不设置 ColumnCount = -1,而直接更改 RecordSource,表格和列的很多属性不会自动更改。
我们做一个试验:
1.新建一个表单,在数据环境中加入"表1"和"表2"
2.在表单上添加一个Grid1,设置其RecordSource="表1"
3.在表单的 init 事件中设置 Grid1.Columns[1].Alignment = 2(居中)
4.再添加一个按钮Command1,其Click事件为:THISFORM.Grid1.RecordSource = "表2"
5.运行表单,可以看到表单的第一列为“居中”显示。单击Command1,直接更改 RecordSource 属性,我们发现表格的第一列仍为“居中”,且列宽(Width)也没有改变,表格的总列数也没有改变。
6.修改第 4 步,将 Command1.Click代码修改如下:
    THISFORM.Grid1.ColumnCount = -1
    THISFORM.Grid1.RecordSource = "表2"
7.再次运行表单并单击Command1,我们发现表格的第一列的列宽变了,并且也不再居中,其 Aligment 还原为 3(Automatic),并且表格的总列数也变了(表格的总列数 = 表2的字段数)
由此可见,很多知识需要在实践中摸索和总结,在课本上是学不到的。

[此贴子已经被作者于2018-11-28 08:31编辑过]


泉城飞狐
2018-11-28 08:27
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
...

[此贴子已经被作者于2018-11-28 14:11编辑过]

2018-11-28 14:10



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




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

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