VB热点答疑2016.4.6更新Q3

收录助教君在VB习题课上最常被问到的问题,每周更新,希望对大家有所帮助。

Q1.如何让新的文本内容接在原来的内容后面/下一行显示?

A1.例如,Label1.text原本的内容是"VB程序设计",现在要把"助教好帅"接到原来的内容后面,应该这样写

    VB热点答疑2016.4.6更新Q3

    还有缩写形式:

Label1.text &= "助教好帅"

    与第一种写法等价。

    要换行显示怎么办呢?拼接上换行符vbCrLf就行了,换行符表示“在此处开始新的一行”。如:

Label1.text &= "助教好帅" & vbCrLf

Q2.(针对第四周作业)如何累计加班天数?

A2. 首先要给大家讲一点基础知识,叫做“变量的作用域”。什么意思呢?每个Dim出来的变量,都是有自己的“活动范围”的,出了这个范围,这个变量就不存在了。

      举个例子:

      VB热点答疑2016.4.6更新Q3

      也就是说,如果你在一个Sub内部(也就是Sub到End Sub这两行之间的区域)定义的变量,出了这个Sub就无法访问了。如果你在Button2_Click这个Sub里也定义了一个变量a,那这个a和Button1_Click里那个a没有丝毫关系。打个比方,比如你单名一个“飞”字,但你姓唐,那以“姓”为作用域来划分的话,你就和《三国演义》里那个同样名叫“飞”的人区分开了,因为他姓张。

      来看下面这个问题:我想定义一个整型变量sum,初始值为0,每点击一次Button1时sum就加1,点击Button2则在Label1里显示Button1被点击了几次(也就是sum的值)。这怎么做到呢?

      显然,sum不能被Dim在任何一个Sub里,因为两个Sub都要用到。

      解决方法是,在“通用声明段”里声明sum。

     VB热点答疑2016.4.6更新Q3

    问题解决。我习惯性的把定义在通用声明段的变量(如上面的sum)称为“全局变量”,而把Sub内部定义的变量(如前面的a)称为“局部变量”。

    还有一个初学者常见的错误

    VB热点答疑2016.4.6更新Q3

   这样做的后果是什么?答案是,Sub里声明的局部变量会“屏蔽”同名的全局变量,按这种写法,在Button2_Click这个Sub里,能访问到的sum只能是Sub内部定义的那个sum,而不是全局的sum。

Q3. 我写的这些代码,到底什么时候、按什么顺序运行?是一点那个三角型按钮就依次运行吗?

A3. 这里又要给大家介绍一个概念,叫做“事件驱动”,什么意思呢?简单地说就是“有事就处理,没事就歇着”。VB就是典型的事件驱动型编程。

     我们写的代码,并不是在程序一开始运行时就被执行,而是要“等待时机”。在VB里,每个控件都有很多系统预定义好的事件,比如一次鼠标点击(click)、按一次键盘(keypress)、窗口加载完成(onload)、文本内容发生改变(textchange)等等。系统会监听这些事件,当这些事件发生时,系统会执行相应的代码来响应事件的发生。好比上课老师点名让学生回答问题,点到谁的名字,谁就起来回答,没被点到的人坚决不吭声,这就叫“点名驱动型课堂”。

       所以我们写代码的时候,其实是按照以下步骤来做的:

      1.选择要处理哪个控件上发生的事件,是button1上的?还是textbox1上的?

      2.选择要处理的事件类型,是点了下鼠标?还是按了下键盘?

      3.当做完选择之后,系统会自动给我们初始化一段代码,就是该事件触发时要执行的那个代码段的头和尾(Sub 和 End Sub),我们只需要在这个代码段内部写好我们的代码,每次当这个事件被触发时,这段代码就被执行一次

 VB热点答疑2016.4.6更新Q3

当光标落在某个sub范围内时,上面的两个栏会自动显示这个代码段对应的是哪个控件的哪个事件。

VB热点答疑2016.4.6更新Q3

所以大家注意,你写的代码当且仅当相应的事件发生时才会被执行。而且,相应的事件每发生一次,这段代码就执行一次

反例:下面这段代码不work,因为每一次KeyPress时,这段代码都会从count=0开始原原本本地执行一遍。

VB热点答疑2016.4.6更新Q3

要正确的初始化count值,应该在声明时直接初始化:Dim count As Integer = 0。

最后,系统对一些控件的常用功能做了快捷设置,比如在设计界面,双击一个按钮,系统会自动把光标定位到处理click事件的代码段内。双击Textbox、Label又会如何呢?自己试下吧!

未完待续

更多相关文章
  • 学习图像算法阶段性总结(附一键修图Demo)2016.04.19更新demo
    今天特别感慨,自己从决定研究图像处理,势必要做出一键修图算法. 经历了,三个多月的书籍积累,三个多月的算法调整以及优化. 人是一种奇怪的动物,当你做不到的时候,你以为做到了,自己会感觉很爽,很有成就感. 而当你做到了,却会觉得也就那么回事. 一开始自己只是很意外性地做到了一种劣质的颜色矫正算法,就觉 ...
  • 视频分享地址:http://pan.baidu.com/s/1boiC3ZT我的QQ:303629685
  • 目录 什么是HTML语义化? 为什么要语义化 常用标签的语义 HTML5新元素 一.什么是HTML语义化?       简单来讲就是:每个标签做自己的事,使得能够被机器直接读懂. 二.为什么要语义化?       1.更容易被搜索引擎收录.       2.方便其他类型设备解析(如:屏幕阅读器等) ...
  • WebStorm配置2016/3/14更新
    目录: 1.主题设置 2.模板设置 3.代码段设置 4.快捷键设置 5.显示行号+自动换行 6.配置github 7.常用快捷键 1.主题设置     1)ctrl+alt+s 打开Settings界面,Editor > Colors&Fonts > Font.     2)De ...
  • DelphiMlSkinV2.9(2016.3.20)发布啦它能让你的程序拥有像QQ一样多彩炫丽的外观
    组件包和Demo程序下载地址: http://pan.baidu.com/s/1qWJgXdU       购买正式版:http://www.pngui.com 支持:Delphi7.Delphi2007.Delphi2009.Delphi2010.DelphiXE.DelphiXE2.Delphi ...
  • 个性定制你的Git命令行提示符
    1, 让BASH 命令行显示当前支线 以及 显示提交状态 并且使用不同颜色高亮区分效果图:进入到git的工作目录后,显示当前所在支线名称如果有已跟踪 未暂存的版本,那么使用红色* 提示如果有已跟踪 未提交的版本,那么使用**** 提示切换到其他支线后 提示符能打印当前支线名称切换到非Git工作目录后 ...
  • splitjob报错的troubleshooting过程
    先说结果,步骤为:1)由job code查找报错的server name(production server)2)在backup server上查找这个server备份任务用到的dg成员3)通过命令查找dg备份任务的log4)如果是因为pre脚本失败,手动执行分离,执行后其实任务就copy正常了5) ...
  • 目前,我已经完成了Module-Zero的翻译,请查看我的<Module-Zero学习目录>. 到现在为止,使用ABP框架开发正式项目已经3个月有余了,期间翻阅了大量文档资料,包括ABP官网的文档,以及 @阳光铭睿 的系列教程. 但是我今天想回过头来,照着ABP官网的英文文档,加上我这几 ...
一周排行
  • 这个版本,其实是借鉴网友的代码,做了部分修改,目前测试能用,但对于代码功能还不是很明白!先保存下吧!#!/usr/bin/env python #coding=utf-8 #auther = shaw #ver =  ...
  • Python核心编程第二章(1)
    . 变量,print和字符串格式化操作符.启动交互式解释器,给一些变量赋值(字符串, ...
  • 昨天同事遇到一个hadoop故障,找了半天没看出问题,问到我这里,花了一会解决了一下,估计这是我给暴风的集群解决的最后的故障了,以后就不定给谁解决问题去了.只截下来了Namenode的报错Log,Datanode的刷 ...
  • 将一台服务器上已有的SVN仓库数据整体迁移到另外一台机器上,要保留所有版本号和版本信息,需要以下过程来解决:1.将准备要迁移的仓库导出:svnadmin dump 仓库路径/仓库名 > svn_dump2.将旧 ...
  • HTML中传递和引用JavaScript变量
       最近微博上一直在转发一张图片,如下,  这就是“不积硅步,无以至千里”的数学解释吧, ...
  • 怎么查IP地址
    一.查QQ用户IP地址 1.通过FolkOicq查IP FolkOicq是个能给QQ添加I ...
  • 1.chmod 600 /root/.ssh更改目录和文件的权限,使用命令相同-R递归,目录下子目录和子文件继承权限:-v显示过程信息:2.chown [选项] 用户或组 文件修改文件目录的属主或属组-R递归处理所有 ...
  • //单选按钮和复选按钮 import java.awt.*; import javax.swing.*; public class Jiemian6 extends JFrame{ JPanel mb1,mb2,mb ...
  • linux常用命令大全(转)由于记忆力有限,把平时常用的Linux命令整理出来,以便随时查阅: linux 基本命令 ls     (list 显示当前目录下文件和目录 ls -l 详细显示 =ll ) [[email protected] ...
  • dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下:1.查看当前用户,可以在 SQL Plus中执行下面语句select user fr ...