当前位置: 首页 >> VFP专区 >> VFP经典问题集(33-64)
VFP经典问题集(33-64)
问题33: datasource 属性和 controlsource 属性之间有什么不同?以及 rowsource 属性和recordsource 属性? 答案33: datasource 属性可以影响存储在一个数据库 (.dbc) 中的 odbc 视图。它包含了对连接到 odbc 数据文件名称的引用,并且必须指向一个通过 odbc 管理程序定义的有效的数据源。您可以使用 sqlsetprop( ) 函数操作 datasource 属性,而用 sqlgetprop( ) 函数可以 查看它的设置。controlsource 属性用来确定一个对象所绑定的数据源;一个对象所绑定的表或者视图可以为任意类型,包括本地 visual foxpro 表,具有 controlsource 属性的对象有:checkbox、column、combobox、commandgroup、editbox、listbox、ole bound control、optionbutton、optiongroup、spinner 和 textbox 控件。某些控件(listbox 和 combobo x)除了 controlsource 属性之外,还有 rowsource 属性允许您一次显示多于一个字段和行。数据仍然是与单一的字段绑定的,这就是为什么这些控件需要 controlsource 属性。表格控件是唯一具有 recordsource 属性的控件,但是没有 controlsource 属性。对于表格控件,数据是与一个完整的记录绑定的。 ==== 问题34: 为什么组合框只显示一行数据?我首先为该组合框定义了一个数组,然后,在表单的 Init 事件中执行了一个 SELECT - SQL 命令来激活数组。 答案34: 在表单的 Init 事件中,您建立了一个没有行或者只有一行的数组。当表单建立后,组合框的 Init 事件发生在表单的 Init 事件之前,所以组合框只包含一列数据。要改正此错误,请在 SELECT - SQL 语句下面紧接着添加下面代码行,在表单的 Init 事件中建立数组: THISFORM.ComboBox1.RowSource = THISFORM.ComboBox1.RowSource ***************************************************************** 当我的游标用SELECT - SQL INTO CURSOR 更新后,网格内容没有刷新? 由于SELECT - SQL 命令是重新建立网格RecordSource属性里的同名游标,当新的游标建立时,原有的游标被丢弃了。因此当SELECT - SQL执行时,网格RecordSource属性被清除复位,并且新网格被建立且未从游标中装入数据。要刷新网格,设置网格的RecordSource属性新的数据源上: THISFORM.Grid1.RecordSource=THISFORM.Grid1.RecordSource ==== 问题35: 如何隐藏标准的或定制的工具条? 答案35: 用HIDE WINDOW命令来隐藏工具条。工具条也可用SHOW WINDOW来显示。 ==== 问题36: 我怎样用VFP做小的图标(ImagEdit)? 答案36: Windows 95能在资源管理器和启始菜单中显示小图标。你可以ImagEdit来为你的VFP应用运行在Windows 95下面制作小的图标(ImagEdit包括在VFP的专业版内。)。 在ImagEdit中制作新图标的时候,小图标通过指定小的图标16-的彩色16x16选项制作。 如果这选项不可用,制作新图标的时候把下列行加到坐落于你的WINDOWS目录的IMAGEDIT.INI文件中: [ImagEdit.Icon] Small Icon=16,16,16 ==== 问题37: 如何在导航中添加记录到表的缓存中? 答案37: 要把记录指示移动到表缓存中添加的记录上,用带负值的GO命令。RECNO()函数在表缓存中的记录上返回升序负数值。 ==== 问题38: 怎样(以编程的方式)复制内容到剪切板? 答案38: 在求助文件中看_ClipText。 ==== 问题39: 调试时,怎样保持计时器处于激活状态? 答案39: 把以下代码放入Timer()事件中: _Screen.ActiveForm.MyTimer.Enabled=.T. IF WVISIBLE("Trace") THIS.Enabled=.F. WVISIBLE("Trace"THIS.Enabled=.F。 ENDIF ==== 问题40: 怎样播放声音文件(.WAV)? 答案40: 除了使用第三方产品和API 调用之外,播放.WAV的最简单的方法是: SET BELL TO "c:\sound.wav",1 ??CHR(7) SET BELL TO ==== 问题41: 怎样设置多个过程或类文件? 答案41: 使用ADDITIVE 子句: SET PROCEDURE TO proc.prg ADDITIVE SET LIBRARY TO class.vcx ADDITIVE ==== 问题42: 为什么当filter设置时,应该用locate代替seek? 答案42: 当你的查找字段是建立了索引且当前索引是该索引时,SEEK 通常是查找单个记录的最快的方法。不过,当设置了filter时,SEEK 非常慢。理由是SEEK将查找符合你的搜索标准的第一个记录。FoxPro为了移动记录指针到相应的记录上,必须找到和你的标准相匹配且和filter条件相称的记录。和 SEEK不同, LOCATE 是可进行Rushmore优化的. 当一个可优化的filter 起作用时,LOCATE FOR CustId=m.CustId 通常比SEEK m.CustId 更快。在GO TOP 和 GO BOTTOM 中也存在相似的问题。用无子句的LOCATE来执行GO TOP,将会使记录指针移动到乎合filter 条件的第一个记录。要执行 GO BOTTOM, 设置当前索引标识的降序然后LOCATE, 在 将索引设置为原来的升序。 ==== 问题43: 我怎样让属性和方法设置到它们的缺省值? 答案43: 你可以在属性窗口中右击一个属性,将会返回该属性的缺省值。当你想设置一个对象的属性为其父类的属性时,该办法特别有用。例如,如果你使用标签类定义了一个标签,且设置该标签类的FontBold = .T,但该对象的FontBold = .F.你可仅右击鼠标,并选的"恢复至默认值"来恢复该类的定义默认定义。该动作也适用于属性窗口中的方法。你可以在方法列表上右击鼠标来除掉某方法中的全部方法代码。这是重置当前对象,让它运行类定义中的方法代码的简便方法。如果你不小心让你的方法编码被缺省值复位,不要保存修改,立即退出表单设计器,当系统提示是否保存修改时,选"否"取回它。 ==== 问题44: 如何能既执行默认的父类的事件/方法又运行一些补充的代码? 答案44: 你可以在子类的方法中输入代码来忽略父类方法代码。FoxPro 将方法代码中的所有字符串解释为可执行代码包括空格和注释,这样将可以忽略父类方法代码。如果你想把注解加到方法代码中,同时又保持继承的父类方法编码,使用范围解析操作符(::)来明确调用父类代码。 一个命令按钮的单击事件过程可能是这样的: && Comments MyExitButton::Click && ==== 问题45: 怎样使 工具条按钮的 可用/不可用 和对应的菜单选择协调一致? 答案45: 一个协调工具条按钮和菜单选择的简单的方法是:在菜单的 Skip子句中使用 Enabled属性。 例如,你有一个名为oToolbar的工具条,其上有一个新建命令按钮叫cmdAdd同时你有一个记录菜单其中有一个新建选项。给新建选项的Skip子句加上"oToolBar.cmdAdd.Enabled = .F."或"!oToolBar.cmdAdd.Enabled"则新建菜单选项仅当oToolBar.cmdAdd可用时才是可用的。 记住Set Skip当它的值为.T.时,废止菜单选项,所以在上例中的NOT 操作符 (!)或"= .F."是必不可少的。 ==== 问题46: 怎样同时设置多个对象的同一属性? 答案46: 用SetAll方法。例如,你决定为全部网格中的标题设置9号宋体。将以下代码放入网格的Init事件: THIS.SETALL("FontName","Arial","Header") ==== 问题47: 我必须总是打入长长的对象层次列表吗? 答案47: 不.你可以使用变量替换 以下两种方法的效果是相同的: Thisform.pageframe.page1.container.object.caption="This" Thisform.pageframe.page1.container.object.left=10 Thisform.pageframe.page1.container.object.top=50 temp = Thisform.pageframe.page1.container.object temp.caption = "This " temp.left = 10 temp.top = 50 另一种方法是使用WITH命令, WITH Thisform.pageframe.page1.container.object .caption = "This " .left = 10 .top = 50; ENDWITH ==== 问题48: 可以迅速地在属性窗口中定位吗? 答案48: 热键Ctrl+Alt+key可使在属性窗口中定位变得快而简单。 例如,当表单对象选中时,在属性窗口中按下Ctrl+Alt+C将快速移动到Caption属性。 ==== 问题49: 当所有窗口打开时,怎样才能看到VFP桌面上的内容? 答案49: 按ALT+CTRL+SHIFT将把全部打开的窗口隐藏起来,直到放开键。 ==== 问题50: 我能创建文本报表吗? 答案50: 可以。将报表表单的ASCII分句打上钩。 ==== 问题51: 我怎样把事情的动作在"大小调整工具条"中颠倒过来? 答案51: 当你单击它的时候,按住Ctrl键不放。 ==== 问题52: 我怎样能更精确地移动表单中的对象? 答案52: 可以一次移动一个对象一个象素。方法是:使用箭头键或拖动它时按下Ctrl键不放。 ==== 问题53: 可以在多窗口中进行拖放操作吗? 答案53: 是,可以在命令窗口中看看效果。你可以拖动在这里打入的代码到任何编程窗口中。 ==== 问题54: 当修改页属性的时候,我得到一条错误信息 "属性xyz找不到"。 答案54: 也许你错误地引用了pageframe容器对象自身: ThisForm.Page1.xyz=20 应该是: ThisForm.Pageframe.Page1.xyz=20 ==== 问题55: 如何添加文本到备注字段? 答案55: lcMemo=’Append this string’ REPLACE Table.MemoField WITH lcMemo ADDITIVE ==== 问题56: VFP 5.0有那些新功能? 答案56: 很多,很多的东西。 新特征,更牢固的环境,更小存储器需求,错误校正,并且更好命名,开发环境.更多的细节的微软公司WWW网点。 ==== 问题57: 当启动应用程序的 .EXE 文件时,如何隐藏 Visual FoxPro 桌面? 答案57: 在 CONFIG.FPW 配置文件中添加如下命令行: SCREEN=OFF 注意:如果您无须将 CONFIG.FPW 作为单独的文件提供(也就是说,在连编 .EXE 文件之后,您不需要对它作任何改动) 。您可向项目中添加 CONFIG.FPW 文件,并将之标记为可包含的,该文件就会连编为 .EXE 文件 的一部分。只有顶层表单活动时,Visual FoxPro 才可以隐藏桌面。使用如下命令,您可以用编程方式隐藏桌面(假设已有一个顶层表单处于活动状态中): _VFP.Visible = .F. ==== 问题58: 如何建立一个带有顶层菜单的顶层表单? 答案58: 要建立一个顶层表单,请将表单的 ShowWindow 属性设置为 2- 作为顶层表单。要建立一个顶层菜单,请打开"菜单设计器"。从"显示"菜单中,选择"常规选项",然后设置"顶层表单"选项。要想将顶层菜单放入顶层表单中,请在表单的 Init(或其他)事件中添加相关的代码。例如: DO with THIS,.T. 如果要查看调用顶层菜单的不同选项,请参阅 generated .mpr 文件中的开始部分。 ==== 问题59: 当我从工具菜单中挑选向导时,应用程序向导不出现。怎样才能运行它? ; 答案59: 要运行应用程序向导, 从工具菜单选向导并从子菜单中选择全部。这将打开向导选择对话框,从中选择的应用程序向导。 ==== 问题60: 如何在组合框中隐藏指定的列,只显示其他的列? 答案60: 在组合框中,隐藏指定列的最简单方法是使用"组合框生成器"。 在"组合框生成器"的"布局"选项卡上,将这些列拖到您所希望的宽度。 如果要通过编程在组合框中隐藏指定的列,请将这些列的 ColumnWidth 属性设置为 0。 在如下的程序代码中,列 1 和列 2 被隐藏,列 3 的宽度为 100 pixels: THISFORM.ComboBox1.ColumnWidths = 0,0,100 ==== 问题61: 在一个编辑窗口中,能否对标注语法的颜色进行定制? 答案61: 从"工具"菜单中选择"选项",很容易定制代码颜色。在"选项"对话框中选择"语法着色"选项卡,您会发现不同的方法可以定制代码颜色。 如果要将语法颜色全部清除,从"编辑"菜单中选择"属性",显示出"属性"对话框。然后,清除"语法着色"复选框。 ==== 问题62: 在我自己建立的类和表单的事件和方法过程中发生错误时,怎样排除?我怎样排除他们的缺陷? 答案62: 要查看类和表单的方法或事件过程中程序编码,把SET STEP ON放在方法或事件过程的开始处(或任何其它你想每次一行的运行程序的代码段开始处). 然后用跟踪和调试窗口来排除你的编码的缺陷。 ==== 问题63: 怎样把空白行加到网格上? 答案63: 网格控件被设计来从表,游标或视图显示记录。你可以用APPEN D BLANK 或 INSERT - SQL命令增加一个空行到网格。在设计时, 网格不能显示数组的元素.如果你不想为网格建立一个磁盘文件,可以考虑用CREATE CURSOR命令来建立一个游标(在内存中的临时表). 在游标建立后,用INSERT - SQL添加记录到游标中。 ==== 问题64: 怎样能计算报表内的行数? 答案64: 你可以使用报表变量来计数报表的行数。从报表菜单中选择"变量"来建立一个报表变量。给报表变量取一个名字并增加一个IIF()函数到变量。作为逻辑表达式的IIF()函数,为你要计数的字段指定条件: 第一个IIF()函数返回值指定1。 第二的IIF()函数返回值指定0。 例如,下列IIF()函数用于计数州名为华盛顿的记录(State = ’WA’)的记录数。 IIF(State = ’WA’, 1, 0) 选择"求和" 按钮, 并保存报表变量. 放入一个字段到报表的分组或页脚带,并为报表表达式指定报表变量。
|
|
| 1楼 cmx 认为: | 发表时间:2006年05月02日 09:29 | 你好谢谢年你的软件哦,祝福你五一快乐哦
| | 2楼 58.218.176.* 认为: | 发表时间:2006年06月12日 15:30 | 紧急求救,我用vfp6.0做的一个系统,连编生成应用程序后为什么打不开?
| | 3楼 58.218.176.* 认为: | 发表时间:2006年06月12日 15:31 | 紧急求救,我用vfp6.0做的一个系统,连编生成应用程序后为什么打不开?
|
|
|
 |