应对工作中常见的编程问题与难点 (应对工作中常见的问题)

应对工作中常见的编程问题与难点 应对工作中常见的编程问题与难点

一、引言

在现代社会,编程已成为许多职业不可或缺的一部分。
无论是软件开发、数据分析还是系统管理,编程都是解决问题和创新的关键手段。
编程工作中难免会遇到各种问题和难点。
本文将探讨应对工作中常见的编程问题与难点的策略和方法。

二、常见问题与难点

1. 代码错误与调试

代码错误是编程工作中最常见的问题之一。
有时,错误可能非常隐蔽,难以发现。
随着代码量的增加,调试和修复错误的时间成本也会增加。
应对这一问题,我们需要掌握基本的调试技巧,如使用日志、断点调试等。
同时,良好的编程习惯和代码规范也能减少错误的发生。

2. 性能优化

随着业务需求的增长,程序的性能要求也越来越高。
性能优化是一个重要的难点,涉及到算法、数据结构、系统资源等多个方面。
我们需要对底层原理有深入的理解,才能找到性能瓶颈并进行优化。
使用性能分析工具也是有效的手段。

3. 安全性问题

随着网络攻击的增加,程序的安全性成为一个重要的关注点。
编程中需要考虑到各种安全漏洞,如注入攻击、跨站脚本等。
为了提高程序的安全性,我们需要了解常见的安全漏洞及其防范措施,并在编程过程中实施相应的安全措施。

4. 跨部门协作与沟通

在软件开发过程中,跨部门协作与沟通是一个常见的难点。
程序员需要与其他部门(如产品、设计、测试等)进行有效的沟通,以确保项目的顺利进行。
为了提高沟通效率,我们需要掌握有效的沟通技巧,如清晰的需求描述、定期的项目进度汇报等。

三、应对策略与方法

1. 提升技能与知识

面对编程工作中的问题与难点,我们需要不断提升自己的技能和知识。
这包括掌握编程语言、算法、数据结构等基础知识,以及了解相关技术和工具的使用。
关注行业动态和最新技术趋势,以便及时调整自己的技术方向。

2. 养成良好的编程习惯和规范

良好的编程习惯和规范有助于减少编程错误和调试时间。
例如,编写清晰的代码注释、遵循命名规范、使用版本控制工具等。
这些习惯和规范还能提高代码的可读性和可维护性,方便团队协作。

3. 使用工具与框架

为了提高工作效率和应对难点问题,我们可以借助各种工具和框架。
例如,使用集成开发环境(IDE)可以提高编程效率;使用框架可以简化开发过程;使用性能分析工具和安全扫描工具可以帮助我们找到潜在的问题并采取相应的措施。

4. 团队协作与沟通

在团队协作中,我们需要建立良好的沟通机制,以确保项目的顺利进行。
这包括定期的项目进度汇报、需求讨论和技术分享等。
我们还要学会倾听他人的意见和建议,尊重团队成员的观点,共同解决问题。

四、案例分析

假设某软件开发团队在开发过程中遇到了性能瓶颈和安全问题。
团队使用性能分析工具找到了性能瓶颈的所在,然后通过优化算法和数据结构解决了性能问题。
团队了解到存在注入攻击的安全漏洞,于是采用了参数化查询等安全措施来防范攻击。
在这个过程中,团队成员之间进行了有效的沟通和协作,共同解决了问题。

五、总结

面对工作中常见的编程问题与难点,我们需要不断提升自己的技能和知识,养成良好的编程习惯和规范,使用工具与框架提高工作效率,以及加强团队协作与沟通。
只有这样,我们才能更好地应对挑战,实现职业发展。


【常用】《数控编程与操作》和《数控加工基础》教学工作总结

一年即将过去,这即将过去的一年是国家发展的关键一年,也是职业教育中的关键一年,在这一年中本人担任了数控专业《数控编程与操作》和《数控加工基础》这两门专业主干课。 回首望去,这一年的教学工作有进步之处也有不足之处。 结合自身的教学情况,对一年的教学工作进行一下总结。 《数控编程与操作》和《数控加工基础》课程是专业理论与实践相结合的课程,结合就显得尤为重要,如何结合也是本人教学的工作重点。 在理论知识方面,应充分了解学生的现状,以培养学生的学习兴趣为重点,先有学习兴趣,后续的教学也会进展的更为顺利。 从数控技术的发展和应用为切入点,着重介绍数控技术应用在现代制造业中的重要性。 另外进入中等职业院校的学生存在着基础知识薄弱、整体学习素质较低的情况,在备课过程中,教师不光对课程知识进行全面的备课,还应对课程知识涉及的其它知识进行充分的准备,以便让学生能充分了解和掌握。 《数控编程与操作》和《数控加工基础》课程理论知识性强,学习知识专业性向,较为枯燥,教师应在课程教学上创新,不光使用板书的方式进行教学,还应在其它硬件和软件上进行准备。 在授课过程中,可以通过播放录制的实际加工视频来对授课的理论知识进行诠释,也可以通过加工的实物展示,来具体讲解理论知识中涉及到的内容,加工的实物就是理论知识学习的结果,结果的展示也是对理论知识教学的诠释。 在加工实物的展示过程中,应贯穿理论知识,将理论知识在实物中进行讲解,使学生能更加容易理解,也会使得课堂教学丰富多彩,使学生的学习积极性得到提高。 针对《数控编程与操作》和《数控加工基础》课程中的重点、难点,做好充分的教学准备工作,可采用理论知识加实际操作相结合的方式进行教学,在操作现场进行授课。 在实操现场,对本节课程的重点,进行实际操作,以教师先进行展示,在展示过程中,穿插讲解理论知识涉及到的关键点,并与学生进行交流,询问学生是否掌握,未掌握的应进行再次展示。 然后指导学生进行实际操作,在学生进行实际操作的过程中,教师应将涉及的理论知识进行再次讲解,教师边讲解,学生边操作,因学生在理论知识的实际运用过程中存在不易直接理解的情况,教师应注意学生操作的正确性,应及时做好再次详细讲解的准备。 在指导实操完成后,应召集学生进行总结、讨论,自己进行分析,然后让学生再次进行一次独立操作,独立操作中应提醒学生按照理论知识的要求进行,完成后对再按照理论知识内容进行检查,最后进行总结、讨论。 通过这样以学生为主体的教学比以教师为主体的教学能更加发挥学生的主观能动性,充分调动学生的学习、操作积极性,对理论知识的内容和实际的运用掌握的更加深刻。 在教学过程中,对《数控编程与操作》和《数控加工基础》课程涉及到的其它拓展知识,也应放入到教学工作中来,因学生多为初中毕业生,对课程涉及到的数学、物理、计算机等内容掌握都不够牢固,在这方面教师备课也要有所关注,对本课程涉及到的其它知识,应在教学过程中,讲透彻讲明白,如在数控设备运行原理上,涉及机械能、电能、电气工作等物理及电工学方面的知识,这些知识都涉及正确操作数控设备和日常数控设备维护的工作,教师在教学过程中应讲解各种能量转换、电机正反转的原理,使学生能充分了解数控设备的运行原理和工作过程,对后续学生正确操作和维护也有着巨大的帮助。 定期对一段的教学成果检验也是工作重点,有些课程中的重点、难点内容相连,若在章节结束后进行检验,使得学生掌握难度大,这时应及时进行分段检验,在章节结束后再次进行全面检验,这样学生对分段的内容已掌握,通过全面的章节检验使学生更加容易掌握全部内容。 数控专业的教学工作任重道远,通过不断的授课创新,才能让学生充分掌握相关知识。

Python编程中的3大挑战是什么?

1.工作环境的设置

设置Python工作环境以满足基本的编程需求,恐怕是初学者在使用Python时碰到过的最典型、最具挑战性的问题。 一旦Python环境未能被合理地设置,初学者不但无法顺利地完成安装,而且会在编程和使用过程中屡受挫败,甚至失去学习的动力。

如何解决?

Python是使用自己的集成开发环境来构建的。 这使得Python用户(其中也包括初学者)能够轻松地安装某个特定的应用程序,并执行不同的功能。 因此,我们可以根据其自带的指南和帮助,让应用的初始化更加流畅、更加直接。

2.学会重要函数

每种编程语言,除了一些通用的函数功能之外,总有一些自带的实现方法。 Python也不例外。 它通过lambda、map、以及filter等函数,来辅助实现应用的某些特定功能。 对于初学者而言,这些既是难点,又是需要吃透和掌握的地方。 只有学会善用它们,我们才能避免重复制造“轮子”,减少犯错的可能性。

如何解决?

在实践中,我们往往可以带着实际需要和问题去学习Python。 例如,我们可以基于目标网站的访问分析需求,去学习如何使用Python的相关函数。 同时,用户还可以通过自定义变量中的数据类型来减少自行编写函数的工作量。 此外,Python自带的自动完成功能,可以减少用户在编程中的输入出错,进而避免程序在运行时出现的各种问题。

3.调试代码

刚接触Python和编程的人通常会对它的语法望而生畏,也可能会犯一些语法上的错误。 不过,随着用户知识和经验的积累,此类错误会逐渐减少。 常言道:“要在游泳中学会游泳”。 作为积累的一个重要环节,初学者可以通过对目标代码的反复调试,来逐步修正各种小错误,进而提高程序的实现效率。

如何解决?

Python编程作为一种动态的编程语言,它具有实时显示代码错误的功能。 开发人员可以在此基础上快速地获悉各种错误,并轻松地予以纠正。 比如,Python编程自带的pdb包,能够以交互的方式实现对源代码的调试。 换句话说,用户能够通过由pdb提供的常用调试命令,来实现:设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量值等目的。

关于Python编程中的3大挑战是什么,青藤小编就和您分享到这里了。 如果您对python编程有浓厚的兴趣,希望这篇文章可以对您有所帮助。 如果您还想了解更多关于python编程的技巧及素材等内容,可以点击本站的其他文章进行学习。

急!关于VB,简单的程序设计

分类:电脑IT 四、数组中常见错误和注意事项1.静态数组声明下标出现变量 n = InputBox(输入数组的上界)Dim a(1 To n) As Integer2.数组下标越界引用的下标比数组声明时的下标范围大或小。 Dim a(1 To 30) As Long, I as integera(1) = 1: a(2) = 1For i = 3 To 30a(i) = a(i - 2) + a(i - 1)Next I3.数组维数错 数组声明时的维数与引用数组元素时的维数不一致。 Dim a(3, 5) As Long a(I)=104.Aarry函数使用问题 只能对Variant 的变量或动态数组赋值。 5.获得数组的上界、下界UBound 、Lbound函数1.Dim数组声明有时用户为了程序的通用性,声明数组的上界用变量来表示,如下程序段: n=InputBox(输入数组的上界) Dim a(1 To n)As Integer程序运行时将在Dim语句处显示要求常数表达式的出错信息。 即Dim语句中声明的数组上、下界必须是常数,不能是变量。 解决程序通用的问题,一是将数组声明的很大,这样浪费一些存储空间;二是利用动态数组,将上例改变如下: Dim a()As Integer n=InputBox (输入数组的上界) ReDim a(1 To n) As Integer2.数组下标越界引用了不存在的数组元素,即下标比数组声明时的下标范围大或小。 例如,要形成有如下30项的斐波那契数列:1,1,2,3,5,8,13,21,34,…,,,正确的程序段如下: Dim a(1 To 30) As Long, i%若将For i=3 To 30改为For i=1 To 30,程序运行时会显示下标越界的出错信息,因为开始循环时i=l,执行到循环体语句a(i)=a(i-2)+a(i-1),数组下标i-2、i-1均小于下界1。 同样若将上例:a(i)=a(i-2)+a(i-1)语句改为:a(i+2)=a(i)+a(i+1)。 程序运行时也会显示下标越界的出错信息,这时是数组下标大于上界30。 3.数组维数错数组声明时的维数与引用数组元素时的维数不一致。 例如,下程序段为形成和显示3×5的矩阵: Dim a(3,5) As Long For i=1 To 3 For j=1 To 5 a(i)=i*j Print a(i);; Next j Print Next i程序运行到a(i)=i*j语句时出现维数错误的信息,因为在Dim声明时是二维数组,引用时的一个下标。 4.Array函数使用问题Array函数可方便地对数组整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组。 赋值后的数组大小由赋值的个数决定。 例如,要将1,2,3,4,5,6,7这些值赋值给数组a,表2.5.1列出了三种错误及相应正确的赋值方法。 表2.5.1Array函数表示方法错误的Array函数赋值 改正的Aarry函数赋值 Dim a(1 To 8)a=Array(1,2,3,4,5,6,7,8) Dim a( ) a=Array(1,2,3,4,5,6,7) Dim a As Integer a=Array(1,2,3,4,5,6,7) Dim a a=Array(1,2,3,4,5,6,7) Dim aa()=Array(1,2,3,4,5,6,7) Dim a a=Array(1,2,3,4,5,6,7)5.如何获得数组的上界、下界Array函数可方便地对数组整体赋值,但在程序中如何获得数组的-上界、下界,以保证访问的数组元素在合法的范围内,可使用UBound和LBound函数来决定数组访问。 在上例中,若要打印a数组的各个值,可通过下面程序段实现:For i=Lbound(A) To Ubound(A)Print a(i)Next i6.给数组赋值VB6.0提供了可对数组整体赋值的新功能,方便了数组对数组的赋值操作。 但真正使用不那么方便,有不少限制。 数组赋值形式如下:数组名2=数组名1我们就此形式作讨论:这里的数组名2,实际上在前面的数组声明时,只能声明为Variant的变量,赋值后的数组2的大小、维数、类型同数组名1;否则,若声明成动态或静态的数组,例如:Dim数组名2()或Dim数组名2 (下标)程序在运行到上述赋值语句时显示不能给数组赋值的出错信息。 所以,为了程序的安全、可靠,建议读者还是忍痛割爱,少用VB6.0的这一新功能,使用传统的循环结构来给数组赋值。 基于此原因,我们也就在教程中不作展开。 五、过程中常见错误和注意事项1.程序设计算法问题该章程序编写难度较大,主要是算法的构思有困难,这也是程序设计中最难学习的阶段。 经验告诉每一位程序设计的初学者,没有捷径可走,多看、多练、知难而进。 上机前一定要先编写好程序,仔细分析、检查,才能提高上机调试的效率。 每当一个程序通过艰苦的努力调试通过时,那苦尽甘来的喜悦令你一言难尽。 2.确定自定义的过程是子过程还是函数过程实际上过程是一个具有某种功能的独立程序单位,供多次调用。 子过程与函数过程的区别是前者子过程名无值,后者函数过程名有值。 若过程有一个返回值,则习惯使用函数过程;若过程无返回值,则使用子过程,若过程返回多个值,一般使用子过程,通过实参与形参的结合带回结果,当然也可通过函数过程名带回一个,其余结果通过实参与形参的结合带回。 3.过程中形参的个数和传递方式的确定对初学者,在定义过程时不能确定形参的个数和传递方式。 过程中参数的作用是实现过程与调用者的数据通信。 一方面,调用者为子过程或函数过程提供初值,这是通过实参传递给形参实现的,另一方面,子过程或函数过程将结果传递给调用者,这是通过地址传递方式实现的,因此,决定形参的个数就是由上述两方面决定的。 对初学者,往往喜欢把过程体中用到的所有变量作为形参,这样就增加了调用者的负担和出错概率,也有的初学者全部省略了形参,则无法实现数据的传递,既不能从调用者得到初值,也无法将计算结果传递给调用者。 VB中形参与实参的结合有传值和传地址两种方式。 区别如下:(1)在定义形式上前者在形参前加即ByVal关键字。 (2)在作用上值传递只能从外界向过程传入初值,但不能将结果传出,而地址传递既可传入又可传出。 (3)如果实参是数组、自定义类型、对象变量等,形参只能是地址传递。 4.实参与形参类型对应问题在地址传递方式时,调用过程实参与形参类型要一致。 例如:函数过程定义如下: Public Function f!(x!)f=x+x End Function主调程序如下: Privme Sub Commandl_Click()Dim y%y=3Print f(y) End Sub上例形参x是单精度型、实参y是整型,程序运行时会显示ByRef参数类型不符的编译出错信息。 在值传递时,若是数值型,则实参按形参的类型将值传递给形参。 例如:函数过程定义如下: Public Function f!(ByVal x%)f=x+x End Function主调程序如下: Priva~SubCommandI_Click()Dim y!Y=3.4Print f(y) End Sub程序运行后显示的结果是6。 5.变量的作用域问题局部变量,在对该过程调用时,分配该变量的存储空间,当过程调用结束,回收分配的存储空间,也就是调用一次,初始化一次,变量不保值,窗体级变量,当窗体装入,分配该变量的存储空间,直到该窗体从内存卸掉,才回收该变量分配的存储空间。 例如,要通过文本框输入若干个值,每输入一个按Eeter键,直到输入的值为9999,输入结束,求输入的数的平均值。 Private Sub Textl_Key Press(Key Ascii As Integer)Dim sum!,n%If KeyAscii=13 Then If Val(Text1)=9999 Thensum=sum/nPrint sum ElseSum=sum+Text1n=n+1 Text1=End IfEnd IfEnd Sub该过程没有语法错,运行程序可输入若干个数,但当输入9999时,程序显示溢出的错误。 原因sum和n是局部变量,每按一个键,局部变量初始化为0,所以会有上述错误产生。 改进方法:将要保值的局部变量声明为Static静态变量或声明为窗体级变量。 也可将要保值的变量在通用声明段进行声明为窗体级变量。 6.递归调用出现栈溢出如下求阶乘的递归函数过程:Public Functionfac(n As Integer)As integerIf n=1 Then fac=1Else fac=n*fac(n-1)End IfEnd FunctionPrivate Sub Commandl_Click() 调用递归函数,显示出fac(5)=120Print fac(5);fac(5)End Sub当主调程序调用时,n的值为5时,显示120结果;当n的值为-5时,显示溢出堆栈空间的出错信息。 实际上每递归调用一次,系统将当前状态信息(形参、局部变量、调用结束时的返回地址)压栈,直到到达递归结束条件。 上例当n=5时,每递归调用一次,参数n-l,直到n=l递归调用结束,然后不断从栈中弹出当前参数,直到栈空。 而当n=-5时,参数n-1为-6、压栈,再递归调用、n-1永远到不了n=l的终止条件,直到栈满,产生栈溢出的出错信息。 所以设计递归过程时,一定要考虑过程中有终止的条件和终止时的值或某种操作,而且每递归调用一次,其中的参数要向终止方向收敛,否则就会产生栈溢出。 六、常用控件常见错误和难点分析1.遗漏对象名称在VB程序设计时,初学者常犯的一个错误是遗漏对象名称,特别是在使用列表框时。 例如,如果要引用列表框(List1)中当前选定的项目,(Listlndex)是错误的。 即使当前焦点在Listl上,VB也不是认为Listlndex是List l的属性,而是一个变量。 所以正确的引用方式是:Listl. 1ist()。 2.列表框的Columns属性列表框的Columns属性决定列表框是水平还是垂直滚动以及如何显示列中的项目。 如果水平滚动,则Columns属性决定显示多少列,如表2.7.2所示。 图2.7.1是一个水平滚动两列显示的列表框。 在程序运行期间,该属性是只读的,也就是说,不能在运行时,将多列列表框变为单列列表框或将单列列表框变为多列列表框。 表2.7.2列表框的Columns属性列数 属性0(默认值)1到n 项目安排在一列中,且列表框竖直滚动项目安排在多个列中,先填第一列,再填第二列……列表框水平滚动并显示指定数目的列3.域级验证域级验证是指输入到某独立域的数据的验证,在域级验证的过程中一般不考虑窗体一般其他域的内容。 进行域级验证的合适时间是:(1)当往某域中输入某个键时,此时涉及键盘事件(KeyDown、KeyUp和KeyPress)。 (2)当用户企图离开某域时,此时涉及CansesValidate属性和Validate事件。 (3)当某域的内容发生变化时,此时涉及Change事件。 CausesValidation属性和Validate事件通常是协同工作的。 CausesValidate属性决定Validate事件是否发生。 如果控件的CausesValidate属性为False,该控件的Validate事件永远不会发生。 如果控件的CausesValidate属性为Tree,当焦点企图移到(还没有离开,也可以说离开之前)另一个CausesValidate属性为True的控件时,原控件的Validate事件发生:当焦点企图移到另一个CausesValidate属性为False的控件时,原控件的Validate事件暂时不发生,什么时候发生?直到焦点移到一个CausesValidate属性为True的控件上时才发生。 例如,假定有如图2.7.2所示的程序。 当焦点企图从Textl移到Text2时,Textl的Validate事件发生,同样当焦点企图从Text2移到Textl时,Text2的Validate事件发生。 当焦点企图从Textl移到Text3时,TextI的Validate事件暂时没有发生,因为Text3的CausesValidate为False,然后如果焦点企图继续移动到Text2时,Textl的Validate事件才发生。 图2.7.2CausesValidate属性和Validate事件CausesValidate属性和Validate事件的这一特性常常应用在如图2.7.3所示的程序中。 当在文本框中输入了无效数据时而又不知道如何输入有效数据时,用户往往选择Help命令寻求帮助或选择Cancel命令结束数据输入,此时不希望执行验证程序。 因为如果执行验证程序且发现了无效数据,则无法选择Help或Cancel了,用户就这样被套住了。 现在只要将文本框的CausesValidate属性设为True,命令按钮的CausesValidate属性为False,验证程序放在 Validate过程中,问题就解决了。 在默认情况下,所有控件的CausesValidation属性都为Tree。 图2.7.3命令按钮的CausesValidate属性和Validate事件并不是所有的控件都有Validate事件。 只有那些能用于输入数据的控件(如文本框、复选框、滚动条等)才有这个事件。 Validate事件过程如下: Privme Sub object_Validate(Cancel As Boolean)… EndSub其中,当参数Cancel被设为Tree后,焦点将不会离开对象。 如果要将实验七第1题改用Validate事件和CausesValidation属性实现数据验证,则应有如下的程序。 Sub txtMath_Validate(Cancel As Boolean)If Val()<0 Or_Val()>100 Then Cancel=TrueEnd If End Sub1.窗体顶部菜单栏中的菜单项与子菜单中的菜单项的区别窗体顶部菜单栏中的菜单项与子菜单中的菜单项都是在菜单编辑器中定义的,但是它们是有区别的。 (1)窗体顶部菜单栏中的菜单项不能定义快捷键,而子菜单中的菜单项可以有快捷键。 (2)当有热键字母(菜单标题中&后的字母)时,按Alt+热键字母选择窗体顶部菜单栏中的菜单项,按热键字母选择子菜单中的菜单项(当子菜单打开时)。 子菜单没有打开时,按热键字母无法选择其中的菜单项。 (3)尽管所有的菜单项都能响应Click事件,但是窗体顶部菜单栏中的菜单项不需要编写事件过程。 2.在程序中对通用对话框的属性设置不起作用在程序中对通用对话框的属性设置不起作用,多数情况是因为在弹出对话框后才进行属性设置。 例如,下面的程序代码就存在这样的问题,改正方法是将弹出对话框语句放到最后,即把=l放在所有属性设置语句的后面。 =1 =* =C:\=Pictures(*)|*|All Files(*.*)|*.*=13.在工程中添加现有窗体时发生加载错误在使用工程菜单中的添加窗体命令添加一个现存的窗体时经常发生加载错误,绝大多数是因为窗体名称冲突的缘故。 例如,假定当前打开了一个含有名称为Forml的工程,如果想把属于另一个工程的Forml窗体装入则肯定会出错。 [注意]窗体名与窗体文件名的区别。 在一个工程中,可以有两个窗体文件名相同的窗体(分布在不同的文件夹中),但是绝对不能同时出现两个窗体名相同的窗体。 4.实时菜单的创建实时菜单是由应用程序根据需要动态创建的。 在VB中,常见的实时菜单是文件菜单,该菜单显示了最近所使用的工程。 创建实时菜单必须结合控件数组,用Load语句创建菜单项,用UnLoad清除菜单项。 创建实时菜单的步骤:(1)在菜单编辑器中建立样本菜单项样本菜单项的属性设置见表2.8.4所示。 设置Index为0,表明样本菜单项是控件数组的一个元素,其下标为0。 样本菜单项的Name属性是必须的,它将作为控件数组的名称。 在下面假定数组名为NameArray。 Visible可以设为True,设为False表示初始时该菜单项不可见。 表2.8.4实时菜单样本菜单项属性 NameCaption IndexVisible设置值必需的可以没有 0 False(2)在程序中用Load语句创建菜单项例如,Load NameArray(1)创建一个新的菜单项(在控件数组中的下标为1,然后将其 Visible属性设置True,同时设置Caption属性。 动态创建的菜单项继承了除了Index之外的绝大部分属性,所以要对Caption和Visible属性进行设置。 另外,样本菜单项在菜单系统中的位置决定了新菜单项出现的位置。 (3)为实时菜单项编写代码每个实时菜单项都是控件数组的一个成员,具有相同的名称,并且共享事件过程。 下面是一个实时菜单项代码示例:SubNameArray_Click(Index As Integer)Select Case Index Case0MsgBox(NameArmy(0)(样本菜单项) is clicked!) Case1MsgBox(NameArray(1)(第一个实购菜单项) is clicked!) Case2MsgBox(NameArray(2)(第二个实时菜单项) is clicked!)End SelectEnd Sub(4)删除实时菜单项尽管把Visible设为False,程序运行时实时菜单项不会显示,然而有时还是需要把实时菜单项从内存中销毁。 删除实时菜单使用UnLoad语句。 例如,LoadNameArray(1)。 有关建立实时菜单的详细内容请参阅教程第4.3节。 5.通用对话框的CancelError属性和Err对象当通用对话框的CancelError属性为True时,无论何时选择取消按钮,均产生 (cdlCancel)号错误,即将Err的Number属性设置为。 Err是VB的一个系统对象,它记录了程序运行期间所发生的错误。 Err对象的重要属性有Number(默认属性)和Description。 当错误发生后,错误的生成者把错误号和有关错误的说明分别存放在Number和Description属性中。 例如,当在 CancelError属性为True的通用对话框中选择取消按钮时,产生一个错误,Err对象的Number和Description属性将被设置为和选择取消。 在程序运行期间,经常会发生各种各样的错误。 有关错误处理的详细内容请参阅教程第 9.6节。 下面是当程序产生cdlCancel错误时结束程序的运行。 SubForm_=TrueOn Error GoTo =l 处理文件的语句ErrorHandler:If =cdlCancel ThenEndEndlfEnd Sub6.与窗体有关的事件在首次用Load语句将窗体(假定该窗体在内存中还没有创建)调入内存之时依次发生 Initialize和Load事件。 再用UnLoad将窗体从内存中卸载时依次发生QueryUnLoad和Unload事件,再使用Set窗体名=Nothing语句解除初始化时发生Terminate事件。 Initialize是在窗体创建时发生的事件。 在窗体的整个生命周期中,Initialize事件只触发一次。 用户可以将一个窗体装入内存或从内存中删除很多次,但窗体的建立只有一次。 也就是说,在用Load语句将窗体装入内存时会触发Load事件,但并不一定触发Initialize事件。 在用UnLoad语句卸载窗体后,如果没有使用Set窗体名=Nothing解除初始化,则在下次使用Load语句时不会触发Initialize事件,否则会引起Initialize事件。 假定有Forml和Form2两个窗体,并且有下列事件过程: Forml窗体事件过程Sub Form_Click()窗体首次装入内存时发生的事件:Load 用Unload卸载窗体时发生的事件 窗体第二次装入内存时发生的事件:Load 用Unload卸载窗体时发生的事件:Unload 用Set窗体名=Nothing语句解除初始化时发生的事件:Set Form2= 窗体第三次(解除初始化后)装入内存时发生的事件:Load Form2End SubForm2窗体事件过程Sub Form_Initialize() 事件End SubSub Form_Lond()事件End SubSub Form_QueryUnload(Cancel As hteger, UnloadMode As Integer) SubSub Form_Unlond(Cancel As Integer) SubSub Form_Terminate() Sub当用户在Form1上单击时,在Debug窗口显示下列信息: 窗体首次转入内存时发生的事件: Initialize事件 Load事件 用Unload卸载窗体时发生的事件: Query Unload Unload 窗体第二次装入内存时发生的事件: Load事件 用Unload卸载窗体时发生的事件: QueryUnload Unload 用Set窗体名=Nothing语句解除初始化时发生的事件:Terminate 窗体第三次(解除初始化后)装入内存时发生的事件: Initialize事件 Load事件7.MouseDown、MOUSeUp和C1ick事件发生的次序当用户在窗体或控件上按下鼠标按钮时MouseDown事件被触发,MouseDown事件肯定发生在MouseUp和C1ick事件之前。 但是,MouseUp和Click事件发生的次序与单击的对象有关。 当用户在标签、文本框或窗体上作单击时,其顺序为:(1)MouseDown(2)MouseUp(3)Click当用户在命令按钮上作单击时,其顺序为:(1)MouseDown(2)Click(3)MouseUp当用户在标签或文本框上作双击时,其顺序为:(1)MouseDown(2)MOuseUp(3)Click(4)DblCUck(5)MouseUp七、文件常见错误和难点分析1.文件系统的三个控件不能产生关联也就是当驱动器改变时,目录列表框不能跟着相应改变;或者当目录列表框改变时,文件列表框不能跟着相应改变。 要三个控件产生关联,使用下面两个事件过程: Private Sub Drivel_Change()= End Sub Private Sub Dirl_Change()= End Sub2.如何在目录列表框表示当前选定的目录在程序运行时双击目录列表框的某目录项,则将该目录项改变为当前目录,其的值作相应的改变。 而当单击选定该目录项时,的值并没有改变。 有时为了对选定的目录项进行有关的操作,与ListBox控件中某列表项的选定相对应,表示如下()3.当使用文件系统控件对文件进行打开操作时,显示文件未找到出错信息。 例如,如下语句:Open + Name For Input As#1当选定的目录是根目录,上述语句执行正确,而当选定的目录为子目录,上述语句执行时显示文件末找到出错信息。 其中表示当前选定的路径, Name表示当前选定的文件,合起来表示文件的标识符。 当选定的文件在根目录下(假定驱动器为C),的值为C:\1,假定选定的文件名为,则+的值为C:\为合法的文件标识符。 当选定的文件在子目录下(假定驱动器为C,子目录为my),的值为C:\my +的值为C:\my ,子目录与文件名之间少了一个\分隔符。 为了保证程序正常运行,Open + As #1改为:Dun F$If Right(,1)\ Then 表示选定的足根目录F=+ 表示选定的是子目录,子目录与文件名之间加\F=+\+ IfOpen F For Input As # 14.Open语句中欲打开的名是常量也可以是字符串变量,但使用者概念不清,导致出现文件未找到出错信息如在从盘上读入文件名为C:\my\,正确的常量书写如下:OpenC:\my\ Input As#1 错误的书写常量两边少双引号或正确的变量书写如下:Dim F$F=C:\my\ F For Input As #1 错误的书写变量F两边多了双引号5.文件没有关闭又被打开,显示文件已打开的出错信息如下语句:OpenC:\my\ Input As #1Print FOpen C:\my\ Input As #1Print 2;F执行到第二句Open语句时显示文件已打开的出错信息。 6.如何读出随机文件中的所有记录,但又不知道记录号。 不知道记录号而又要全部读出记录,则只要同顺序文件的读取相似,采用循环结构加无记录号的Get语句即可,程序段如下: Do While Not EOF(1)Get #1, , jPrint j; Loop随机文件读写时可不写记录号,表示读时自动读下一条记录,写时插入到当前记录后。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论