| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1802 人关注过本帖
标题:如何实现 GRID 控件右键实现 COMMAND 效果或者通过什么方式达到我的目的?
只看楼主 加入收藏
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
楼主的问题有三种解决思路:
1. 采用将当前表单定义为全局变量的方法,虽然可行,但我认为是“下策”,原因请参考“开发漫谈(22)”最后一段。
2. 我在三楼给出的方案,是通过将当前表单传递给菜单中的私有变量(Private),可列为“中策”。
3. 如果楼主熟悉相关的菜单处理命令和函数,可直接在RightClick中对菜单进行定义和处理,代码更为简捷,可以直接引用 THISFORM,可列为“上策”。表格右键代码参考如下:
程序代码:
* 定义菜单
DEACTIVATE POPUP mnuPrint
DEFINE POPUP mnuPrint SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR 1 OF mnuPrint PROMPT '预览当前户家庭档案卡'
DEFINE BAR 2 OF mnuPrint PROMPT '打印当前户家庭档案卡'
DEFINE BAR 3 OF mnuPrint PROMPT '打印查询结果家庭档案卡'
DEFINE BAR 4 OF mnuPrint PROMPT '批量打印家庭档案卡'

* 激活菜单
ON SELECTION POPUP mnuPrint DEACTIVATE POPUP mnuPrint
ACTIVATE POPUP mnuPrint
RELEASE POPUPS mnuPrint

* 根据选择的菜单项,做相应处理
LOCAL nBar
nBar = BAR()
DO CASE
CASE nBar = 1    && 预览当前户
    THISFORM.Image6.Visible = .f.
    THISFORM.Check7.Value = 0
    * ……
CASE nBar = 2    && 打印当前户
    * ……
CASE nBar = 3    && 打印查询结果
    * ……
CASE nBar = 4    && 批量打印
    * ……
ENDCASE


[ 本帖最后由 liuxingang28 于 2014-5-19 12:02 编辑 ]

泉城飞狐
2014-05-19 10:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在表格中安置命令按鈕不是好主意,這樣做衹是額外添加麻煩。

授人以渔,不授人以鱼。
2014-05-19 11:49
pzyun1985
Rank: 2
等 级:论坛游民
帖 子:106
专家分:18
注 册:2013-4-13
收藏
得分:0 
回复 11 楼 liuxingang28
大侠所言极是,你所列代码就是VFP生成MPR文件后自动添加的代码,经过代码测试,第二种和第三种的处理速度一样的。

[ 本帖最后由 pzyun1985 于 2014-5-19 13:24 编辑 ]
2014-05-19 13:20
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
个人看法:我不认为全局变量是下策,只要程序员控制得好,根本不会出现混乱。另外,对于一般使用者而言,为什么要让同一表单重复运行呢?尤其是对于初学者来说,或者是对于不很庞大的系统来说,同一表单重复运行有什么意义呢?
2014-05-19 15:07
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
好的编程习惯,无论对于初学者,而是编程老手,都很重要。把变量的作用域限定在最小范围,是最基本的常识。就本例来说,能用私有变量解决的,肯定要比使用全局变量要好。
在阅读 taifu945版主的《Foxpro入门手册》时,其中在讲述列表框的示例中,很多都来源于全局数组,如果将其改为来源于表单的数组属性,可能就更完美了。

泉城飞狐
2014-05-19 16:28
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
这是个没有答案的问题,还是看个人习惯和喜欢。我编程的时候其实也比较讲究严谨,但与飞狐兄弟的严谨不同,我喜欢在简单实现的前提下再考虑如何严谨。比如,在内存变量方面,我不会去拘泥于全局还是私有/局部,我强调使用于不同场合或代表不同意义的内存变量不要起相同的名字。只要名字不同,无论其作用域是多大或多小,都不会产生歧义,也就不会在无意中让变量加载到错误的值。至于运行多个副本可能会对全局变量产生的副作用我没深入研究,不知道是否飞狐兄弟在“漫谈22”中说的“多线程”是否指同时运行多个副本的情况。我是这么看的:1、一般而言,同一表单不会刻意去运行多个副本;2、即使同时运行了多个副本,彼此之间的全局变量会互相冲突吗?我认为计算机软件的工作原理是这样的:每个新进程中涉及到的内存变量都是新辟一个内存地址,而不会彼此相互影响。我在书中也说过,内存变量的本质是内存地址,并不是变量名。当然,FoxPro是否对内存变量的多副本用法有改变,我再做一个实验。之后,跟贴给出结果。如果飞狐兄弟说的多线程不是指多副本,也请跟贴不吝赐教一下什么情况是多线程。
2014-05-19 20:21
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
实验结果出来了,同一个表单在多副本同时运行的情况下,全局变量是各自为政的,不会相互影响。实验结果证明了我对变量工作原理的推断是正确的。飞狐兄弟可以下载运行一下试试,我同时提供了EXE版和SCX原版。
全局内存变量多副本实验.rar (13.86 KB)

2014-05-19 20:47
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
taifu945 老兄,我的测试也出来了。我测试结果是:一个表单的多个副本中定义的全局变量,是相互影响的。请注意:我说的是在一个应用程序中同一个表单的多个运行实例(也就是您所说的一个表单的多个运行副本),不是“应用程序”的多个运行实例。至于一个应用程序的多个运行实例之间,同一表单中定义的全局变量,肯定是互不影响的。可能是我们的理解有偏差。

我在测试时,直接打开了 Form1 两次,在 Form1.Load 中定义全局变量 gcUserName,并赋初值空串。在第一个窗口中单击“设置变量值”按钮,执行 gcUserName='泉城飞狐',然后在第二个窗口中单击“显示变量值”按钮,则会显示gcUserName的值为'泉城飞狐',而不是显示空串。

下面是我的测试原代码:
test.rar (13.42 KB)



[ 本帖最后由 liuxingang28 于 2014-5-20 08:42 编辑 ]

泉城飞狐
2014-05-20 08:28
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
原来你是指在同一进程中同时运行一个表单的多副本,那肯定是有影响的。所以,我一般把所有表单都设为模式运行,这样一来,只有表单关闭了才能调用其它菜单命令或表单,可以避免同一表单同时运行多个副本带来的问题。
2014-05-20 12:03
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:0 
在我刚接触 VFP 时,也是将所有表单设为模式表单的。后来发现,这样的设置存在很多缺陷。比如说:我在“库存余额表”窗口发现某些材料的库存额有问题,想打开“材料明细账”窗口看看是怎么回事,但此时我必须关闭库存余额窗口后才能打开明细账窗口,很不方便,等你打开明细账窗口后,可能早忘了是哪种材料了。最理想的情况是,将库存余额窗口与材料明细账窗口同时显示在桌面上,可随时切换两个窗口中的记录,便于对账。所以,现在我在开发程序时,很少使用模式表单,除非是想从该表单返回值或该窗口的操作对其他窗口的功能有影响。比如:修改口令表单、重新登录表单、选项设置对话框等就应该设置为模式表单,其他的大多数表单设置为无模式表单。

泉城飞狐
2014-05-20 13:20
快速回复:如何实现 GRID 控件右键实现 COMMAND 效果或者通过什么方式达到我的目 ...
数据加载中...
 
   



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

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