还有最后一个问题,我们按下 f 十一的时候,他会进入 program 的 慢方法,然后执行这里面代码,对吧?当他在执行这段代码的时候,把这个窗体实体化,按一下 f 十二,对吧?这个时候他会调这里面,假设你在这个在一个类里面啊,你做了一些字段和属性,对吧?而且你给这个字段或者属性赋了一个数值值的时候, 那么这个时候你就注意下,那么我在这个字段或者属性赋值的代码, 是不是这个事上你也要注意一下,因为我们可以看一下按下 f 十一对吧,最后我们走一遍啊,按下 f 十一对吧,进入,无论你是控制台还是这个,其实都是入口函数,都是古怪的慢方法, 对不对?这两个你不要管,它也不会去做一个改动的,你真正要改动的可能是这里,比如说如果你想这个先运行的是这个窗体,对吧?那么你就把这个名字换成这个 fm, 落个 e 啊,就你做一个登录窗体,你想第一个出现的是这个窗体,那么你把这个名字换一下就可以了,对吧? ok, 看一下按下 f 十一, 这时候啊,不是先进入代码数,是先给这个字段或者属性赋一个初值值,就如果你有给这个字段属性赋值的代码,像我这种,对吧?他是先去执行这种代码,对吧?包括这个不是我写的啊,这边两个是我啊,给你做实验啊,是我写的,对不对? 这个不是我写的,这个是这个它里面自动生成的,当所有的代码或者属性赋完了,这个时候再去执行这个代码数。
粉丝6759获赞7417

大家好,我们在撰写论文的时候经常会遇到 excel 和味的同时使用的情况,这时候我们希望将 excel 穿体织柄,那么如何操作? 首先我们启动任务抽屉程序, 激活以上窗体 ctrl 键系统工具窗体置顶,这时候就可以将以上窗体置顶, 激活 excel 窗体 ctrl 键系统工具取消置顶。 可以看到 x 二窗体已取消置顶,谢谢大家。

如何制作一个漂亮的按钮界面?拿出一个图片共建修改,索性输入监控地址 db 一点零点零,选择功能开关,添加,选择反转地址 db 一点零点零,点击确定。 修改显示内容,添加两种状态,选择图片, 点击确定。能复制四份, 修改第二个空间的属性,选择显示内容,修改图片, 点击确定。把下面的都修改一下, 点击确定。选中四个空间修改值,预览一下, 调整大小,修改尺寸模式,调整一下位置,最后配置一下通讯,点击通讯配置,选择 prc 通讯协议,修改 ip 地址, 启动运行。注意看下面播出软件这个监控区域,下面我们来操作一下, 这样我们就实现了在三维基主态界面里面用图片来制作漂亮的按钮。

好,我们简单说一下 word 的 一个结构, word 的 话它其实跟控制台是一样的,它这边也有一个 program, 那 就说你点启动的时候还是进入 program 的 这个慢方法里面,然后呢?这样从上到下依次执行这两个,你不用管它,对吧?我们也不会改。那么真正重要的是从这里开始, application 是 一个类, run 运行的意思, 这时候你会发现啊,这边我扭出来的这个 f r m 是 什么?就是我们这里做的这个窗体,也就这个窗体,它实际上是一个类,对吧?你现在看到的右键查看代码,你会发现这个窗体 它是一个类,对吧?那么根据这个类扭出来的就是这个窗体的实体,所以最终运行的时候看到的是基于这个窗体类啊的一个实体,对不对?

那这个视频呢,我和大家分享一下,使用 csiv 和 vov 开发工具,开发一个系统有多么的简单,我们可以看一下这个案例。 那这个窗口是比较简单的,我们可以看一下这块呢是一个下拉列表,里面呢可以进行选择,那这个呢是一个按钮, 那下面呢是一个显示的一个列表,我们不需要关心这个按钮是怎样做的,然后呢这个列表如何去这样显示,或者这些表格我们不需要关注这个,因为这些空间呢都是现成的,我们只需要拖过来直接用就可以了。那接下来我可以做一个简单的演示, 那目前这个项目里面呢,只有一个窗口,我们可以新建一个窗口, 那这个呢是我们新建的窗口,那这个窗口上面呢,他的最小化,最大化以及官位按钮,这都已经是平的,不需要我们自己去写。那这一块呢,如果我们的窗口上面需要按钮,那我们只需要拖动就可以了, 那这个呢是拖动的一个按钮,我们再拖动一个, 那这个按钮的名称呢?我们都可以去修改的。 那同样的我们也可以拖入两个输入框, 当然输入框里面的内容呢,我们需要轻松一下, 我们再拖两个来不? 那现在呢,我们现在有两个来波,两个出入框,然后呢有两个按钮,那现在呢?是不是我们可以快速做一个动作的一个窗口,是不是很简单?

大家好,欢迎来到朝夕教育,我是刘老师,老师这节课啊,继续给大家这一个介绍,我们这个顶部分页按有的一个啊, 事件响应,对吧?那么这一块的话,我们还是要还是要对在这里边来做,对不对?首先啊,第一就是我们的这一个啊, 这一个页面啊,对吧?虽然默认啊,我们通过三个模块啊,可以啊,打开三个模块的默认管理页面,这三个页面,对不对?但是在这里边响应啊,它并不能实现 这个啊,管理页面的一个切换,对吧?那么在这个通过这三个按钮来切换的话,其实我们要把这一个按钮和他相关的页面进行一个关联,那么如何来进行关联呢?对吧?这就是 一个问题啊,第一种方式,或许啊,最简单的最直接的就是说啊,我给啊各个按钮, 就是我们的这一个各分页啊,各分页按钮这一个去注册事件,对吧?然后嘞啊,在每个事件,在每个事件中,我们去啊这一个实力化啊,实力化相关 页面,对吧?实力化相关页面,然后打开显示到我们的这一个,显示到我们的这一个拍到里边就可以了,对吧?这肯定就是最原始啊,最直接的方法 啊,这一个页面不多还好,但是整体其实我们这一个父母看起来我们的这一个啊,主页面页面不多,对吧?其实我们就做这几 快处理,我们这一个啊,后台代码已经相当的啊,相当的多了,对不对?哎, 整体来说,感觉我们这个主页面还没做多少事啊,就写了两百多行代码了,对不对?所以这一个是个问题,我们能够啊啊有的问题啊,能够把他这一个尽量啊简化,虽然说方式不太聪明对不对?但是啊也要做一个 做一定的处理,但是这种方式啊,我们这一个这里是啊不推荐算也不错啊,不推荐, 接下来呢我们接下这种方式,虽然说感觉也不是太高明对不对?但是呢相对来说要好一点,就是说这样的话,我们按这里啊,这个最终啊,我们这里采用的这种方式啊, 就是啊将各个啊页面的这一个缝啊,各个页面的这一个缝,内明啊内明与我们的这一个啊分页按钮 关联起来,那么如何关联呢?这又是一个问题,这里呢我们就采用啊,可以啊将我们的这一个类名啊,就是说啊,我们在这个我们当前应用程序里边的这一个文件加, 然后点,然后这一个就是我们的凤鸣称,对吧?这啊把这一个信息什么呀啊把他这一个啊设置啊,设置为我们的这一个分页按钮的这一个台格啊, 这次给的这个开格属性来进行一个关联,那么我们便利的时候做响应的时候,我们就什么呀去获取我们当前点击按钮的这一个啊太格属性,对吧?通过这一个太格属性去获取到他关联页面的这一个文件加加内米 加这一个就是我们的凤鸣称吧,对吧?然后呢再通过我们当前项目的这一个啊 命名空间,就是也就是我们个人的程序及名称去做一个什么呀获取,如果我们这个页面是第一次打开,对吧?那么我们就要创建这一个父母的实力, 然后啊再把它这一个显示在我们这个配乐中,是这么一个过程,对吧?如果有的啊,当前已经打开了,我们直接 从我们的这一个一打开双体集合里边获取出来,再度啊激活显示就可以了,我们一个啊大致的流程啊,就是这个样子的,对不对啊?所以啊,我们这里啊 方案啊已经设定好了,然后我们就按这个实现,那么所以啊第一步啊,第一步我们这里就是来关联啊,关联我们的这一个页面的。第二步啊,然后就是来这一个显示, 显示我们相连的这一个页面啊,到我们的这一个披露里边,对吧?是这么一个过程, 好,我们接下来啊就按照这两步行进,那么这里的这一个啊方式来啊,感觉啊也不是,也不是太聪明,至少我们这个 这里主要是页面不多,可以采用这种方式,太多的话就不好。然后还有一个问题,就是一旦啊我们这一个做的过程中,后面啊又去改动这一个啊, 复我们的这一个类名啊,就是窗体的名字啊,这些管理页面的名字的话,那么啊我们这里的名称啊,你也要做一致的更改才行啊,是这个样子的,对不对?其实我们复制给这个胎哥的只是一个支付串信息啊,这个样子, 我们接下来还是这一个,像这种方式的话,我们还是首先就在这一个顶部啊,对吧?在这一个页面加载的时候来做这一个初始化信息,就是初始化我们的这一个分页啊,八成的这一个台格啊,台格属性值,我们这个样 来做,对不对啊?在这里边啊,我们就把它进行相应的一个设置操作嘛,对不对?这个就叫设置, 设置分页按钮的这一个啊,太格属性啊,太格属性,其实呢,这个我们就是来做这一个页面关联的,对吧? 好,接下来呢就为各个按钮,就是我们上面的这一个 btn 是多配几他的胎个,对吧?进行相应的一个复制,我们这里啊,也可以这样写字符串的方式,对吧?写这一个啊,是多 if i am, 是多立体啊,这个样子来写,对吧?或者的话啊,这一种又感觉有点太死了,对不对?我们万一要改的话不太好啊,我们可以用稍微这个灵活一点的用这一个 type of 啊,我们这一个是多 点多立体,对吧?通过这种方式,然后嘞获取他的一个啊完整名称,那么这一个完整名称他里边啊就包含了这么几项信息啊,就包含了我们的这一个啊,命名空间。 命名空间加什么呀?加我们的这一个,这一块,对吧?这一块的一个字符串名成这个样子,就是他所在这一个文件夹名嘛,对吧?啊?这一个命名空间准, 整体来说是包括命名空间,是包括我们的这一个是多的,所以我们就命名空间加什么?加我们的这一个啊?父母的这一个类名称,这个样子,对不对?可以这样来做啊,稍微要好一点,对吧?因为我们这一块完全没有屏蔽吗?对不对?好, 这里比如说,然后就是我们的这一个是多润剂或者叫 s 润剂啊,对吧?配剂,他的一个胎盖对应的啊,我们也是一样, 我们的 fm store rain genese t foreim, 对吧?好,然后还有我们的 btn 产品叫做一个 product 体配计啊,它的一个 来一个啊,就等于我们的 type of product t 点 if i'm product in this t 点 following。 好,再也就是我们的 btn productte install 配件 抬一个啊, product team product team store 啊,这一个页面啊,它的一个 foreign, 对吧? 其实我们写死的那种方式后面取的啊,稍微容易一点,这里取的就要稍微麻烦一点啊,对吧?至于为什么老师说会麻烦一点呢,待会啊,大家就知道了啊,这就是我们的这一个是多 temperature 佩奇啊,他的台盖等于我们的台坡 石头 temper 点我们的这一个,这个页面第一次有点长,对吧?好, 通过这种方式啊,将它关联起来,我们这一步关联啊,就做到这里啊,就这个样子,然后呢啊,我们就是在上节课的这个事件处理程序里边 啊,你,你们的这一个复制效果啊,是做了那么相应页面的这一个响应啊,对吧? 这是我们各页面的一个啊,页面内容切饭啊,并没有做我们,所以啊,就要在这里啊来判断啊,衣服,我们这一个可立体八寸啊,我们点击的八寸,如 果你的台歌啊,不等于 love, 对吧?好,我们就要获取的这个台歌内容了,你的台歌内容呢,其实就是我们这一个父母的这一个完整名称,对吧?我们其实要获取到 想要获取的是你的这一个父母的名称,对吧?所以先要把你全部获取出来吗?反正要用啊, 拍个点图时尊,对吧,这个就是你的完整内命,然后呢,我们如果还要去判断啊,我们当前你的这一个是否已经在我们的这一个打开的创体集合里边了,所以我们要获取这一个 fm 内蒙啊,你的窗庭内蒙名称,这个时候呢,我们就通过这一个啊,完整名称啊,去 这一个截取啊,截取我们的萨博士尊,嗯,哪一部分呢啊,就是啊,这里边又是我们的这一个 fr, 哎,上面专门弄一个获取他的最后一个缩影啊,这一个位置,或者说啊,因为他的这一个是以点分割的啊,类似于 这种方式,对吧,我们就要获取一二三三个点啊,第四组,那么这样又写的太死了啊,我们就这么样子来写啊,获取他的这一个 nasty 啊,点的一个缩影啊,对吧? 好,这个时候呢,就通过这一个佛类啊,去做一个个体,嗯,拿题 indicates or 这一个点啊, 对吧?这名称里边点的最后一个缩影,那么我截取啊,就从这一个缩影的下一个位置开始,对吧?截取就从这一个拿 ty indiantyx 啊,加一对吧, 加于截取到最后这个样子,得到的应该就是我们的风力,对吧?好,然后呢,我们就通过这个内幕来判断啊,以否我们这一个是不是我们的这一个最后一啊,是否已经打开了,我们去获取一下,看能否啊,通过这一个 f 二零获取到, 对不对?个体啊,所以,哎,这里不是用衣服啊,我们就弄一个定一个 form 啊, f 来定义啊,来获取一下,看能否 获取的到。如果啊,这个 f 啊等于 love 啊, 如果他等于闹,就表示啊没有打开,对吧?这个缝没有打开,然后我们就在这里边来做这一个实力化的一个处理, 否则的话,对吧?他就等于这个父母了,我将他这一个显示,对吧?最终我们将他显示到我们的这一个啊,赔了。配件啊, 配置,这个是来显示我们这一个页面内容的,对不对?将它添加到我们的这一个配置里边,就是我们这一个 f, 对吧?这样就可以了。最后啊,这一个 f 在这一个啊,在这里面已经续了,对吧?啊,这里边还还 还要做一个处理啊,就是是否显示啊,是否这一个处理我们的这一个关闭按钮的显示 啊?这里我们做啊,要做这么一件事,就是当所有页面都关闭了的时候,就是啊,我们后面做这个事件处理程序都关闭了,这个按钮就不显示了,只要就有一个页面, 嗯,这一个未关闭啊,我们就显示,所以我们会统一的写这么一个方法啊,叫 private 啊,这一个处理我们这一个什么呀? 修啊,我们这一个可能是佩奇吧,腾,对吧?写这么一个方法,这个方法里边呢,我们就根据这一个衣服啊,我们的这一个 培基,培了培基,他的这一个 ctrl 抗体啊,如果是大于零的,就表示里边有显示的页面, 然后我们这一个 btn 叫什么呀?可乐佩奇啊,他的微热波啊,就等于醋 l 四啊,我们就这个他的 vivo 啊,就等于货色就不显示啊,这个就是来处理我们的这一个 关闭啊,页面啊,叫什么呀?页面按啊关闭按钮,关闭按钮的显示啊 的显示处理在这一块,所以啊,这里边啊,我们就直接吊用这一个 修 clothes button 鼻涕啊,对吧?直接调用在这里,好,我们接下来要处理的就是这一个实力化过程,也就是说当我这一个父母并没有打开的时候,我们就要去实力化, 我们这里边实力化来通过的啊,要用我们的这一个完整内容,对吧?就是我们这里的佛人,那么这一个佛人他的显示是我们一个动态实力化对象的这么一个过程,这个实力化过程呢?啊,我们就是一个 f 啊,对吧? 我们这一个 f 要等于这一个 xtv 头啊,我们通过这一个类啊来进行一个实力化 ct instance, 然后这里边来是一个太部对象啊,对吧?那么这一个太部对象呢?我们这里是要通过什么样的方式来嘞?通过我们的这一个,呃,叫太谱点 gettype, 因为我们这里是通过这个 xtv 头,而不是通过程序集来创建的,所以这个就是我们的这一个 frm four 类,它的完整类名,对吧?好, 来,然后这个这个方式创建好的啊,获取好的,他是一个太不对象,这里创建好的他是一个什么呀?他是一个 object, 所以我们要把它转成凤, 对吧?他至少的是一个缝,通过这种方式来进行一个实力化,实力化 过后了啊,然后我们再把它添加到这一个过程啊,整体啊,这里就是我们这一个什么呀?啊?切饭啊切饭这一个页面 在一个实线处理啊,的一个实线处理,就是这个样子的,对不对?这里不要,其实就是一个支付串处理啊,对吧?再一个实力发货啊,这个就是调用我们封装好的显示这一个服务页面的方法,这个样子,对吧?好,我们再来看一下, 哎,点们啊,我们这一个主页面的还有一些设要处理,对不对?好,这是我们的这一个仓库管理页面啊,仓库分区, 还有我们的产品信息,产品入库,仓库温控啊,对吧?这几个切饭 ok 了吧? 没问题吧,对吧?我们这这节课整这么大一堆色啊,其实就为了实现这么一个效果,我们在颜色复制效果的同时啊,我们要实现 里边的这一个页面内容的实现,因为它里边的这一个啊,页面啊 from 它的一个大小尺寸,我们还没有统一,所以大家可能看 怎么里边的内容大小不一啊,我们最后啊会整体的实现这么一个统一的效果,对吧?不着急啊,不着急,我们统一的都会实现 好,这一块的话啊,我们来看一下,主要是我们这可能有的父母啊,他最小尺寸比这个尺寸还小啊,所以整体的话啊,我们要去做一个统一啊,这一点啊,后面啊整体效果啊,他就不会是这个样子, 因为在这里边啊,我们整体啊,最后他都是我们让他都是最大化显示没边框的,对不对?是这个样子的, 好去这里是不是有这么一个原因啊,因为我显示的已隐藏像这种啊,对吧?他再一次弄开,我们直接这里,是啊,就这里是什么,就是没有在这里边显示的,对不对?我们才做,我们如果是把这一块 统一啊,都暴力似的全部这个样子来处理,对吧?我们的效果是不是啊,就不会出现他的那个尺寸大小不一的照应说因为我们都最大化啊,不应该会出现那种效果,对吧? 应该是这样才对啊,对吧?这里还是有一点,你看像这里 应该我们默认最初的啊,都不是这样的,而这里出现这种情况是有一点点问题的,对吧?我们来看一下, 或许是这样,我设置了最大化再去处理边框,可能他的就啊就会造成这一个问题,我们这个时候把这个顺序颠倒一下啊,我们先把这个边框去掉啊,再来设置我们的这一个啊, windows 代替啊, windows 代替,我们这个时候啊, 来看一下啊,他又会怎样,是不是就对了啊?好,我们这个时候啊,最开始第一次是没问题,后面我们再一次切饭的时候,哎, 好像就对了,对吧?可能就是这个问题啊,对不对?这个时候啊就对了啊,所以这个时候有时候这些细节问题吧,我们还是要去 这一个处理的,对不对?那么接下来啊,我们就再做一件事啊,就是我们,嗯,这一个下节课还有一个细节,就是我们要把这一个 在这个小尺寸这种情况下啊,要把这一个啊窗体的一个拖动效果实现,对吧?这一块是很关键的,不然的话我们没有最大的话又动不了啊,这种还是 很让人头疼的,对不对?好,我们这节课呢啊,就做到这里,主要就是完成了我们这一个啊顶部页面按钮的一个页面观点与切换效果的实现,对吧? 我们最终采用的是啊设置这一个分页按钮的这一个胎壳属性来实现他与这一个啊页面信息的一个关联,最后呢,这一个在 将我们相关啊,点击按钮的时候,将他关联的页面显示在我们下面的这一个拍了里边,对吧?虽然啊这个过程中我们实现啊倒是没什么问题啊,主持啊,页面切饭的时候啊,各个页面的一个尺寸啊,有一点点瑕疵, 那最后呢啊,我们最终还是把它实现了,对吧?好,这就是我们这节课的内容,如果大家针对这节课的一个内容实现还有任何疑问或不明白的啊,可以课后加一下我的扣扣二幺五九六七四六四三啊,进行一个沟通与打理。 那么我们这节课啊,就到这里,也希望大家继续支持丽儿老师的歌声,欢迎大家一键三连,好吧,好,我们今天就到这里,谢谢大家。

六十分钟系统掌握 winform 常用控件开发,快速搭建桌面应用界面。 winform 控件是什么? 为什么要学 winform 控件?怎么快速上手 winform 控件开发,以项目为导向的实用开发思维。对应的课键源码都准备好了,六六六,拿去尝一尝,话不多说,直接开讲 好,小伙伴们晚上好,我是刘老师,今晚的话我们继续来讲温 form 基础知识,今天的话会继续来讲温 form 的 窗体,继续的介绍和我们常用控件啊和常用控件的一部分讲解好。首先内容我们今天分为三大块,第一块就是窗体的常用方法和事件的讲解, 第二的话就是窗体的初步化原理,以及我们的添加控件的方式,还有事件注册的方式讲解。第三呢,标签,文本框,按钮这三个简单控件的一个使用讲解 好。那么在控件这一块的话,其实从我们温控这一阶段开始,都是对我们嗯,这一个开发语言的一个使用阶段了啊,就不再是哎,我们学习的啊这一个阶段好。那么首先呢,我们来说第一个内容, 窗体的常用方法和实践。我们先来说方法,上节课嘞,我们在这里边已经介绍了我们的窗体是什么,以及我们窗体有哪一些属性,还有他的父类是谁 常用的属性这一块都给大家啊,大体把这边我们罗列的属性都给大家介绍了一遍,是不是好,那么接下来的话我们就来说一说他的方法好,他的方法,嗯,不知道我们这这边之前已经给大家讲过没有啊?讲过没有, 那么在这里边我们去打开另外一个窗体啊,用数方法,这边已经使用过了啊,关于这一块吧,最近啊,我们在周末的时候有一个学控件的小伙伴,对吧?那么在这里边对应的, 我们最前期我们是这一个直播的啊,这边运控课,运控课这边对应的的话,要求我们的规划式直播啊,并不偏心啊,并不偏心,内容是一样的啊,我们都是同一个可见啊。 ok, 好, 那么哎,这一个我们有一些小伙伴学过很多期了啊,所以这一个我们的内容啊,不存在的,偏心啊, 早来说亏欠了啊。 ok, 好, 然后对应着我们的这一个窗体的显示啊,窗体的显示我们是用的秀,对吧?好,用的秀好,然后在这里边的话,其实关于窗体的方法,我们除了秀用来 显示我们的窗体,还有另外一个显示窗体的方法叫修 dialog, 就 窗体显示为模式动画框。好,那么第三呢,我们还可以隐藏,还可以激活,还这一个来用于我们重绘过程中,不管是控件还是窗体 啊,这一个,比如说某一个属性的改变,要引起这个外观的重绘啊,我们刷新并重化,我们可以用它,所以一般情况上我们是用不上它的啊,所以这个方法呢,一般在哎控件的重绘啊,比如说扩展的属性的 ct 访问器里边,我们经常会使用到它,然后再来就是我们的关闭,这一些方法的话,都基本上比较简单啊,这一个比较简单 啊,这一个也比较常用啊,那在这里边我们一一给大家说一下啊,说一下,他说的是,哎,我们就业班那边用的是空间的录播,这边又直播,就觉得那个老师不够怎么样 啊?不够对人啊,就是觉得偏心啊,这个样子啊,不存在啊,不存在,我们早期都是直播,现在因为就是内容我们是一样的啊。 ok, 好,那么再接下来的话我们就一一来走啊,之前我们讲过啊,比如说在这个登录按钮里,我打开点击这个按钮,就打开这一个 phone 一 窗体, 比如说这个 phone 一 窗体,来,我们给他改个名啊,来形象一点,比如说打开什么呀?这是我们的系统主页啊,系统主页。 ok, 好, 然后在这里边来我们 窗体上啊,对吧?哎,先放一个东西吧,放一个标签,比如说我们像这边这种放一个标签,显示一个欢迎信息呗,对吧?好,比如说我们在这个地方,或者直接就在这里随便放一个,好,这一个来,我们就显示一个欢迎 欢迎进入系统管理主页啊,管理界面是不是这个样子?好,我们就显示这么一个,把他的这一个字体改大一点啊,字体改大一点, 大的往上走啊,比如说改个四号,然后嘞其他我们就不显示啊,那么我们在这里边嘞, 之前就是我们去打开一个另外一个窗体,是吧?打开另外一个窗体,那么我们就要把这个窗体先实力化,对吧?好,创建这么一个窗体内的实力,然后给秀出来啊,这个样子, 所以嘞,在这里边嘞,我们就对应着先来设计一下啊,先来设计一下, ok, 好, 那么在这里边的话对应着 啊,我们在这里边显示,对吧?好,你看显示这一块,这个界面就显示出来了啊,这是通过序的方式,为什么弄不上来?是因为我们之前讲这一个窗体有一个叫属性,叫啥嘞?这个属性叫我们的这一个 topmost, 我 们把它设置为簇的缘故。 好,所以这个时候吧,我们重来啊,对吧?好,重来,然后 ok 啊,点击这个就是显示这个显示嘞,我还可以切换回去,还可以切换回来,它可以失去焦点,对吧?好, 对吧?这个样子。那么我们第二种方法,这个修单调了,他就是一种模式化对法框的形式来显示,那这种显示方式呢?他就怎么样?他就不太一样。所以在这里边啊,我们第一个 显示啊,这一个也是显示窗体的方法啊,显示窗体这种显示窗体来,他是可以切换 按到其他,对吧?可以切换到其他页面的,然后嘞可以失去焦点 啊?可以失活,对吧?可以失活,说简单一点,也就是可以激活,可以失活这么一个意思,是这个样子的,对不对?那另外一种方式,就是我们刚刚所说的另外一种方式,他也可以显示窗体,但是这种方法显示的窗体嘞, 它是一种模式化打开的方式,对吧?好,模式化打开,这是这一个模式化显示窗体啊,显示窗体也可以显示这种显示的话,它就怎么样不能切换到其他界面?就是除非关闭 这个这个界面,除非关闭我们要显示的这个界面,关闭这个 form 一 界面,不然 不能怎么样切换,不能切换到啊?我们这 这一个,比如说主页其他页面啊,不能,可以,不能切换到其他界面,对吧?好,其他界面这么一种情况啊,是这种形式的啊,除非关闭,不然不可以啊,不然不可以,这就是他的一个特点啊,我们来看一下 这一个和之前第一种方式的一个直接区别在哪里?就是这个时候我点击可以打开,也是可以打开, 打开方呈现上没有任何区别,但是这个时候啊,你看我想切换回来,想这一个切换到其他应用倒是可以,但是当前我比如说我要切换回这个登录页啊,就不行,除非我把这个页面 关闭了才可以。这一个呢就是模式化显示窗体的效果。好, ok, 我 们在座的小伙伴对于这个秀和秀 dialogue 它们的效果对吧?它们的效果已已经特征这一块大家分清楚了,明白的啊,我们走个小 e, ok, 嗯,有没有问题?没问题,我们就小姨走一个啊,小姨走一个确认一下, ok, 好, 没问题,我们就要把小姨走一个啊,小姨走一个,别去。呃,这一个纠结谁先来啊?谁后来?好,然后接下来我们就来说一说这个隐藏啊, 隐藏有这么一个效果,他隐藏不是最小化是吧?好,隐藏这个隐藏的窗体来,我们可能就要借助另外一个窗体,哎,按钮来显示啊,我们这边再放一个按钮。好,这个操作小伙伴们知不知道这个操作我是怎么复制来的? 好,有没有人不知道的?如果有,不知道我刚刚这个操作是怎么做的?小伙伴啊,走个二,有没有人知道这个怎么做啊?其实我这一个操作就是 复制了一个按钮,在界面上通过这个按钮复制了一个按钮,对吧?复制了另外一个按钮,这个按钮就是我按住 ctrl 键,嗯,对吧?首先我左手按住 ctrl 键,右手来我鼠标 选择这个按钮,按住拖动啊,就可以实现这个复制效果啊,所以我们有些小伙伴说,哎,老师,我看你界面上一下都多出来一个, 感觉是复制出来一个按钮拷贝出来了,那这个操作你没有说,对吧?这个操作就是按住 ctrl 键的同时拖动这个按钮就可以实现复制啊,实现复制,我们来一个隐藏吧,对吧?好,来一个隐藏, 来一个隐藏这样的一个按钮,好,我们就叫 b t n hide 啊, b t n hide 的, 然后在这里边的话对应着啊,我们把这个事件处理程序啊,重新注示啊,对吧?重新注示好,然后这边呢?他和他可能就是, 哎,同一个 tab 键啊,对吧?好, tab 键,这都是零,这个是,这个可能也是负二四一吧,那这个我们就弄成二啊,是吧?不然这一个你如果通过 tab 键的顺序的话,定位 就怎么样?他两个都是同一个了啊,我们就弄个零一二这个样子。好,然后这个按钮的话,我重新双击注册啊,对吧?来做隐藏效果 好,来做隐藏效果,但是这边呢我们要注意啊,刚刚的代码要改一下啊,改一下, 嗯,隐藏,那么我们这边呢就相当于是显示,那么显示这一个窗体呢,我就要往外边画,或者是这个样子,我在外边来进行声明啊,我在这个地方来声明。好,声明一个啊, form 一, 对吧?好, form 一, 我在这个地方在外部声明,不然的话我另外一个按钮里边是无法使用这一个 实力的,对吧?无法使用的一个实力的,所以希望在多个事件处理程序里边都可以操作这个显示的窗体,我们就把它定义在方法外表内的里边就可以了啊,定一个他这个地方嘞,我们就对他进行 实力化显示,对吧?实力化显示,然后这边呢,我们就来进行怎么样隐藏,比如说我显示出来了,我也想把它隐藏起来,我就可以用这个 form 一, 嗯, form 一 点怎么样? hide 对 吧? hide。 但是嘞,我们这一个必须显示过后才能隐藏啊,所以你可以这样来判断一下 if 我 们的 form 以它的为热卜为处,对吧?好,我就来这一个 显示啊,所以为处可以直接这样一副,哎,缝一点 v 二不对吧,也就是它等于处的时候我就把它隐藏是不是?好,那么啊,也可以把它再次显示出来。第一个呢,是 初次显示吗?实力化初次显示,那么我隐藏和显示可以交替进行,我可以用一个按钮来做,就隐藏于怎么样在显示,对吧?隐藏于显示,所以这个时候嘞,我这一个对应着也可以把按钮文本 一起改弄一下。一个按钮做两件事,显示和隐藏。显示过后重新隐藏是不是好?呃,在这里边小伙伴可能问,那我这个地方 是不是要先判断他为不维拉啊?维拉我才说实话,我也可以不换的,我每一次就说实话个新的, 如果允许这样式,如果不允许重新你就可以判断一下啊。 if 我 的 form 一 等于 now, 那 我在这里边就怎么样实力化并且显示, 对吧?好,实力化并且显示这个样子是不是就这样的?好,然后在这里边这个模式化的话一般如果要来回切换我们就用秀,对吧?来回切换就用秀,嗯,这一个必须要操作完了关闭 才切换回来,我们就用秀单调,如果是基于这种情况嘞,他就可以不做双重功能了,是吧?好,所以我向这个地方来。 l 是 如果 是隐藏的我们就把它显示出来,是吧?好, for 一 点怎么样点这一个秀,哎,秀这个样子啊,隐藏了可以再显示 我们就用这个方法啊我们就用这个方法然后嘞按钮文本也可以变化一下如果已经隐藏了我就 文本就显示为显示如果已经显示了啊我这一个按钮文本就显示为隐藏啊显示为隐藏。 好,显示为隐藏,这样的话啊,我一个按钮就可以做两件事了,是不是?好,我第一次显示出来是吧?好,我可以把它怎么样。隐藏隐藏就看不到了 是吧?在下下你看在下面也看不到。好,然后再显示显示这边我下面的话就有都看得到是吧?就看得到这个状态栏里面就有啊,但是我隐藏的话,对吧,他和最小化是不一样的啊, 他就隐藏了啊,对吧?啊这一个显示隐藏显示隐藏啊,就这就是我们的害的方法 是吧。其实嘞我们在这里边大家要知道这么一个原理,我们的宿方法是吧?我们这边的一个宿方法它其实这个地方显示出来就是我们窗体的为热波好,为热波等于处, 对吧?啊就是为热波显示呗就等于处,那 had 嘞其实就是对应的把它的为热波设置为 force 啊,为热波 设置为 force 啊,就只达到这么一个效果。这个嘞,就是隐藏,是吧?隐藏这一个嘞,就是这一个显示 display, 对 吧?哈? display, 好, 那这一个如果是 now 的 长弧,那这一个确实是。那我们小伙伴说,那这个地方 还有一个大前提,万一我这个没有说实话,直接就来点这里面的显示隐藏,那么在我没有点击登录按钮这里,他就没有实力化,这里边是一个,然后那这个地方呢?会报错,对吧? 对,这个确实是,所以呢,如果没有点我们那个登录按钮之前就来点这个显示隐藏,那就有这么一个引办。所以呢,你在这里边就是对应的,如果 for 一 在这个地方,如果你要直接点它也是, 如果 form 一 怎么样?不等于 now 的 时候是吧?好,不等于 now 的 时候,我们下面这一段逻辑是没有问题的,所以这一块就是逐步去完善了,对吧?让我们的程序变得更加严谨,否则我们就怎么办? 就是这一个待该窗体为实体化也可以怎么样?哎,限制一个实体化,比如说我不能在这里,这里只做显示和隐藏,如果在为空的话,我们就怎么样?错误提示, 所以呢,我这个地方就可以显示一个错误,就是,哎,该界面为怎么样? 未创建你可以写啊,未创建你可以写这么一个,哎,错误,对吧?好,未创建弹出这个就表示错了,是不是?好,所以在这里面的话,我们其实在这一块编程的话 很简单,直接,我直接这样,他就是未创建,我先点击登录好,我这个时候再来隐藏显示, 然后再来隐藏显示,隐藏就没有问题啊,这就是这一块,对不对?好,所以这种来就是一个简单的功能效果了,是吧?这就在做编程呢啊,我们在讲 phone 的 最开始,我们就慢慢的进入到 功能开发了,对吧?功能开发了啊,就是这么一个例啊,就是这么一个例,好, ok, 好, 所以这个显示隐藏,哎,这几个方法就没问题了,是不是啊?就给大家用了,这个大家能不能理解,有没有问题? 哎,感觉老师今天头有点疼啊,感冒一直在完完复复的。 好,那接下来的话我们就来说一下,这个激活瑞瑞西的话不好讲,所以暂时我们就不讲。大家知道这个 我们今后在空间开发那里会遇到他啊,窗体的重会跟空间的重会是一回事啊,所以他是要重化窗体的时候我们才会去调用啊,比如说改了一个属性,这个属性会影响, 哎,控制我们这一个窗体外观的这么一个纸,那么改了过后嘞,就要去重绘,立即重绘,立即重绘,就调它啊,这个样子,其实我们在在控件重绘那一块啊,我们经常不用它,我们用因微粒代替啊,因微粒代替,好,那么我们先下来说一下这个激活 激活窗体给赋予它焦点。好,我们先来给大家看一个效果啊,先看一个效果,我点击这一个界面的时候,这个时候 啊,初次显示这个时候窗体就是一个激活的状态,当我切换回来这个时候,他就是激活,那他这种状态呢?就叫失火。好,那么接下来我们给他给大家这一个 啊,界面上放个按钮来辅助一下来呈现我们这个时候,哎,这一个空间的一个效果吧,对吧?好,空间的一个效果。好,这个时候吧,我们该怎么来说呢?怎么来说这一个比较明显的,比如说我这个时候,哎, 呃,我这个时候做这么一件事啊,做这么一件事,比如说我显示的时候啊,这个时候如果我们弄个控制台吧,我们之前好像这个窗体有没有控制台输出啊?我们有没有弄成控制台输出 啊?我们先右击属性啊?没有,所以我们也想控制台输出,就把它输出类型设置为控制台应用程序啊。好,设置了过后我们重新生成一下,那么这个时候呢,我们就来个 在这边显示过后我们来个控制台输出,好来输出它的,这个时候 form 一 的,哎,一个效果啊,是吧?这个时候我们就输 form 一 啊, form form 一 的这一个激活,激活状态啊,激活状态在这里边呢?我们这个窗体实力,它有一个叫这一个叫 activity 的,是吧? 哎,我记得有吧,我记得有吧,就是这一个是它的一个激活方法啊,我们来看一下啊。窗体窗体 form, 好,我们来看它的这一个属性啊,嗯,这个是激活窗体,和以前好像不太一样了吗?好,我们的这一个,这个,这个。我记得以前有一个不是 is active 这么一个值吗?没有吗?现在变化了, ok? 嗯,不是没有这一个了, 我记得是有吧,是吧?记得是有窗体有一个,现在没啦,没啦,只有这么一个方法,他的这一个一直也没有这个属性了,是吧?没有, 没有了,那就不能直接这样弄了,我们的这一个我看一下他好像有一个方法倒是可以的,那这个时候吧,没有,我们想要获取到,他,这个时候是可以获取到什么呀?这个时候是可以获取到我们的激活窗体, 当前窗体的应用程序的激活窗体只能这个样子了啊,所以我们这个时候就这样写吧。嗯,这一个 不能激活状态了,那就这一个当前的激活窗体啊,我们就这个样子来,是吧?哈?激活窗体是谁?是吧?哈,就是这一个,我们这个时候就是 form form 的 这一个 active form, 对 吧?通过这个来吧,对吧?好,这个来,这是一个它,那它的这一个名称吧,我通过名称来判断。是不是通过名称来判断啊?我们这边是系统课啊,不连麦啊,不连麦, ok, 嗯, 好,所以在这里边的话,对应到我们这个时候就可以来显示一下啊,显示一下。如果这个时候我点击登录的时候,你看当前的激活窗体就是 form 一, 是不是? 好,然后我们切换回来的时候,是不是?那么在这里边对应的其实就是我们当前窗体除以 form, 这一个叫裸井,它处于一个激活状态,是吧?处于一个激活状态,所以这一个激活状态过后嘞,我们比如说在这一个界面上啊, 激活过后,其实这个时候嘞,我们会涉及到窗体,嗯,这一个裸井窗体如果激活了,它其实有这么一个事件,这个事件呢,就是我们待会儿会讲的这一个 xt 问题的, 就是激活时,对吧?哈?激活时,好,所以就是激活状态发生,对吧?好,这一个呢,就是被激活的时候,在这个地方呢,我们再来输出,就 再来输出我们这一个激活状态,对吧?哈,因为当前我们显示这一个 phone 一 的时候, phone 一 就是激活窗体,那这个时候我们再来显示一下,对吧?当我们切换回来的时候啊,比如说登录这个时候的激活窗体 就是这一个,最开始显示的话就是裸井,那我们这个时候点击登录显示了这一个 phone 一, phone 一 的话,这个时候就是激活窗体,然后我们再切换回来,你看 又是我们的裸井了,这个就是我们的所说的,哎,激活状态,激活状态,那么在这里边的话,我们可以通过这种操作上啊去来回切换, 从而激活窗体,比如这个时候显示他,他当前就是激活窗体,我登录显示他嘞,他这个时候就是激活窗体,我可以切换回来,这个就是 手动操作去切换啊。激活窗体,我们还有一种方式呢,就是我们也可以通过方法来激活,是吧?好,比如说这个时候有一个隐藏吧,我再来放一个, 哎,激活,对吧?哈?激活,我当然就激活这个 phone 一 嘛,对吧?啊?所以在这里边吧,我们就激活机机,激活。好,我们激活这一个, 我们写一个激活 form 一 啊,激活 form 一, 好,然后在这里边儿嘞,啊,我们就 b t n i k t v t 啊, i k t v t 是 不是?好,然后在这里边儿嘞,我们就通过方法来激活啊,所以这个方法嘞, 我们写那么半天,其实挺简单啊,挺简单的一个东西。好,在这里边嘞,比如说当我们失活的时候,我们去激活,我们就怎么样啊?这一个我们可以这样写啊,对吧?之前大家我记得讲语法的时候讲过这个啊,有个带问号的,对吧? i t v t 这一个的话,就是如果,哎, form 一 不为 now, 就 怎么样调用我们的 activity 方法, activity 方法 这个样子啊,是这样的好,那么这种效果的话对应着啊,我们在这里边嘞,哎,这一个就可以来显示效果了啊,比如说这个时候我点击登录,这个时候是激活窗体 显示了,他就立即激活好切换回来了,这个时候就是我们的呃,登录页又切换回登录页了,在这个时候他就是处于激活状态,我可以点击这个按钮,通过方法来激活我们的主页, 所以这个时候吧,他也是激活,是吧?他也是激活,那这个时候这里没输出,主要是我们调用过后,我们没有去这一个,再一次去获取输出呗。去输出,这个时候我们再一次去输出,去跟踪当前的激活窗体是谁啊?所以 登录啊, form 一 激活,然后,呃,登录页激活,然后再 form 一 啊,你看这个时候 form 一 又激活了,就是我们点击这个按钮,其实这里边就通过这个方法来激活的,对吧?这一个方法呢,在这个地方调用这个方法就是来激活 以哎激活我们的窗体的,那这种情况呢,就是窗体是处于失火的状态,我们才去激活嘛,对吧?才去激活,这就是我们窗体的一个激活啊,窗体的一个激活。 呃,然后呢?这个重会我们就不讲啊,大家知道这个是哎会立即刷新并且重会窗体啊,然后我们就来说关闭了啊,关闭的意思嘞,他就是来让我们当前的,哎, 窗体啊,怎么样关闭并且释放相关资源啊?这个样子,所以在这里边关闭,比如说我们什什么时候关闭了我们这一个,呃, 这一个,这样吧,对吧?好,这样吧,我们再放一个按钮来关闭浮谜,对吧?好,关闭浮谜,我们不再 form 一, 这边可以直接点击左上角按钮关闭。我们也可以怎么样通过方法来关闭啊?这边呢我们就写关闭 form 一 啊,关闭 form 一。 好,那么这个关闭 form 一 呢?对应的我们其实就调用的是我们的 close, 对 吧?调用的我们的 close 方法 来关闭的啊。好,所以在这里边我们比如说这个时候要把关闭就 for 一 这个时候,哎,不为空的时候啊,不为空,哎,不为空的时候我们就来,哎, 要英文状态下啊,我们一点 close, 对 吧?好,那么这句话的意思就是窗体如果是怎么样啊?就关闭这个窗体吗?对吧?关闭窗体。来,我们来看这个方法,我们走 f 一 啊,走 f 一 走 f 一。 我们来看这一个方法的一个具体介绍,对吧?好,具体介绍这个 close 方法呢?它就是关闭窗体, 关闭窗体时,他并且他也会将这一个窗体对象中所创建的所有对象都释放,对吧?哈?都关闭并且释放该窗体, 通过这个方法嘞,他会去怎么样啊?我们可以在 kolon 时间里边去取消而去取消关闭操作,是吧?关闭操作。这个关闭的话,所以我们经常说关闭了这个窗体,他就会连同这个窗体资源一同释放啊, 会连同资源一起释放,所以如果已经关闭了的窗体,你还在使用这个窗体,就会爆 报一个异常,这个异常就是已释放啊,这个是窗体资源已释放就是 object dispose, 哎, except 啊,这一个异常好,所以这一个呢,就是我们所说的关闭窗体啊,关闭窗体,把这个窗体关了,对吧?关了 资源呢,也就释放了,是不是?好,所以,呃,一个已经关闭的窗体,哎,然后除非我们再重新显示,是吧?好,登录啊,这一个 显示我们点击关闭啊,就没了,是吧?点击关闭就没了。好,那么这个点击关闭了过后,小伙伴说还能不能直接打开啊?我们来试一下呗, 是吧?好, phone 一。 这个时候还能不能秀啊?还能不能秀我们试一下就知道了先。我说的不上算啊,我说的不算数 不上算。好,所以在这里边我们其实就要知道关闭过后这个窗体是一个什么样的啊,这个显示关闭,关闭了过后,你看调用了关闭这个窗体,这个时候他并不为空,是吧?并不是重置为闹,所以这个时候吧,我们重新, 但是我们重新去打开就不行,因为呢不能访问一个已经释放的资源,虽然说这个地方 而我们关闭了这一个对象,他不是呢,没有重置为闹,但是呢,这个窗体之源已经释放啊,已经释放了,这个时候,呃,关闭过后我们再显示啊,关闭后再 怎么样?再秀啊,再秀。这个时候怎么样?会出一场啊?会报一场,这个一场就是我们的,呃,原因就是我们这一个,呃。 form 一, form 一 啊,已释放。好, form 一, 这个窗体已释放,对吧?已释放的资源是不能怎么样再去怎么样打开的是吧?好,再去这一个数再去显示的,除非我们重新,哎, 重新去创建,对吧?重新去创建这个过程,所以这里你就别想着我们,哎,能不能像连接对象那样 关闭了,我们还可以重新打开是吧?好,这一个是不行的啊,我们刚刚已经用实际效果来给大家说明了一下,这个样子啊,这是我们这一块啊,这一块, 这一个嘞,就是我们以上讲的关于窗体的几个常见方法,我们经常在温控开发里边会用到的嗅 修 dialog, 有 时候如果要以需要隐藏窗体,用 hide, 需要激活,需要用通过 编程的方式激活,用 active, 然后需要关闭,用我们的 close 啊,这是我们这几个常见的,这个不差, 不太常见,一般用于重会里边啊,重会里边, ok, 好, 所以关于这几个方法,我们刚刚讲的这几个方法除了 refresh 以外,几个方法我们小伙伴们清楚的啊,走个小一啊, ok, ok, 嗯,有没有问题?好,我们这个时候安排个福袋啊, 好,那么接下来的话,我们这一个方法几个方法就介绍完了啊。好,然后我们来说说事件, 好,这个我们平常关于窗体最常用的事件呢,主要是我们的加载,对吧?好,加载,有时候如果涉及到光窗体关闭的时候要处理一些资源,我们也会用 form closure 好尺寸调整大小时发生,我们用 resize 重绘窗体,我们用喷体,尺寸改变后啊,就是渗属性改变时,我们就会去,哎,也会去这一个触发,对吧? 这个呢,就是我们失火啊,被停用,其实就是我们失去焦点时,成为不激活 不活动窗体时发生,就像我们刚刚说失火状态,对吧?手切换到另外一个窗体,那当前窗体就会处于一个停用状态,这个就叫不活动好。还有嘞,就是 visible 属性 改变,就是他从显示处变成 face, 或者从 face 变成处的时候,就是这个值改变时候发生,那么我们平常小伙伴一定要注意的,哎,几个啊,就是第一个就是我们的闹的第二个嘞,哎,我们 还常用一点就是我们的 form closure, 如果要重绘窗体来,我们就会用我们的这一个盼题啊,就会用我们的这一个盼题啊,就是这个方法,是吧?这个方法好,其他这一些事件的话,有时候会用的到, 哎,除非有这么一个,比如说激活的时候要去处理,要去做处理,我们就会用它,是吧?这是我们失火的时候,这是激活的时候,那么,呃,我们, 哎,关于我们标出的这三个方法,相对来说使用上会比较多一点。其他方法,呃,事件呢,并不是说不用,是相对用的少一点,但是我们在这里边罗列的这几个方法,大家一定要清楚啊,一定要清楚,哎,首先比较常用的就是我们的 log note 事件呢,就是窗体加载到内存时发生,这一个呢,会在第一次显示窗体前发生,嗯,做一些关于 界面上的一些初步化处理啊,初步化处理,那这种事件的话,对应的我们窗体的加载事件是我们窗体的默认事件,我们只要在窗体上空白处,不是其他空间区域啊,就是我们窗体上或者标题栏部分, 我们去双击就会去注册这个界面的加载时间啊,双击注册, 双击注册我们的 log 事件。好, log 事件这一个嘞是来做我们窗体的初识化处理 啊,比如说关于一些界面上的一些控件的初识化,一些数据的相关数据的初识化,对吧?一些加载初识化的一些加载处理。来,我们就在这里边来进行,它嘞是发生在啊,发生在我们调用 show 或我们的 show dialog 方法后,对吧?哈,用这个方法后会去触发啊,我们可以来验证这一点啊,验证这一点, 好,那这一点的话对应着我们用个谁啊?我们来验证这一个 form 一, form 一 比较明显,我们可以去跟踪嘛?是不是好在这里边啊?我们调用 show, 然后嘞我们就在 form 一 来注册它的加载事件啊,这一个嘞是 form 一 的加载事件啊,加载事件那也是来做出式化的啊,出式化 可以是很多形式界面控件的一个重置,对吧?就是你这个界面显示出来的话,某每一个什么编辑框啊,选项啊的一些默认 呈现啊,这些默认重现,或者说我们这个界面要呈现的一些数据的一些,哎,默认啊,初识查询等等之类的,所以我们就在这个里边来 来执行,比如说这个时候吧,呃,我们的这一个,呃,界面上最开始啊,我们就显示成这样,是吧?那么对应的是布局的时候,而实际上我们初识化的时候啊,我们会把这一个 label 一 它的 take 起来,我们这个时候等于啊这一个你。嗯,你好,欢迎 进入系统啊,欢迎进入系统界面啊,我写成这样啊,我出使画的时候在这里边来做出使法啊,我们这个时候来看一下这一个整的次序。好,我们点击登录来做显示,你看最开始是没有进入到 form 一 的,我调用数方法过后 就进入到这里,对吧?就进入到这里了,所以这里边的话弄了过后啊,对吧?好,弄了过后,嗯,这边的话未将对象引用到实体,为什么? 嗯,我们这一个 get 返回的是空啊,当前窗体 这个时候还没显示出来吗?是不是因为我们在这里边做了处理没显示出来,所以这一个 我们就先走了啊?先走了,先把它注视掉, ok, 好, 然后对应的话我们在这里边啊,你看我们点击登录,好,走到这里,对吧?好,走到这里。 ok, 好, 走完过后 是吧?就显示成,你好,欢迎进入系统界面,是不是?好,这一个嘞?就是我们所说的加载,对吧?所以这边呢,我们是按着啊走我们的这一个段点给大家看一看。我们在这里边啊加载,它是什么时候 发生的,对吧?他是在我们第一次调用了袖或者袖带的老哥,但是在窗体显示之前,对吧?调用这个袖方法,但是在这个窗体视觉上真正的出现在我们屏幕上之前发生,去做 相关的信息初步化或者加载处理啊,界面的初步化啊,这一个或者说信息的加载处理这样的一个工作,是不是这个就是我们的?哎,闹的时间啊,闹的时间。好,这个闹的时间大家清楚没有?有没有问题? 就是我们每一个界面啊,我们秀之前显示之前内都可能会做一些出什么,当然没有的话就直接显示出来了。如果你给他 订阅了加载事件,那么加载事件里边写了相关的执行逻辑,它就会在调用数方法过后,执行了这一个 log 事件处理程序的逻辑过后,这个界面才显示出来,是这样的一个。啊,这样的一个原理。好,大家有没有问题? 好,没问题的啊,我们走个小一。 ok, 好, 小伙伴们啊,赶快领福袋,福袋要结束了啊。 ok, 好,那在这里边的话,对应着我们接下来就来说一说这一个激活吧,对吧?好,创建激活呢,我们刚刚已经订阅过了啊,我们就不这个重复说了啊,重复说了激活呢,我们是在这一个登录页代码后台 来的一个注册的,这里边来,我们就在激活的时候,是吧?我们在这里边激活。激活,我看一下激活,我刚刚不是订阅了一个吗?嗯,登录页 取消隐藏啊,激活这里啊,我们就是去输出吧当前的一个激活窗体,是吧?这一个呢,就是激活时窗体激活时发生, 窗体激活时发生,就是这个窗体重新获取焦点后,对吧?获取焦点后他就会去执行这个事件。好,这是我们的激活失火呢,就是失去焦点的时候发生 失去焦点,比如说这个处于激活,我们比如说把这个 form 一 显示过后,又切换到我们的登录页,那么这个时候 form 一 呢,就会处于一个失火的状态,失火的状态呢,我们就找到这个事件列表啊,点击数据面板 进入到事件列表,然后去订阅。我们这个 d 开头的啊,对吧? d 开头的,嗯,就是窗体被停用时发生啊,这个就是我们所说的失火。 窗体失火时发生 啊,失火时发生,对吧?那么在这里边我们比如说显示啥呢?也输出吧,输出个啥,就控制台输出。简单一点啊,就输出我们父安的一个主页已失火吧,我们这个样子来写啊,这个样子来写, 它就是当前 for 一 以怎么样以停用,或者说已失去焦点已失去 焦点,已失去焦点,我们显示这个啊,就是在失火的时候会发生,我们来看控制台输出好,来看控制台输出,然后在这里边你看当前 for 登录窗口是激活状态,我点击登录, 是吧?进入到这里,进入到这里过,后来这个时候我们再来看这一块啊,对吧?我们的 form 一, 这个时候, 对吧?好,刚刚我们点击,这样它就会失去焦点,是吧?这一个来就获取焦点,这个失去焦点,获取焦点,然后这边呢也叫 当前激活窗体,就是 form 一 了,那么,呃呃,不是,就是 form loggin, 就是 登录页,那么 form 一 就处于失火焦点,也就是说当它处于一个不活动的时候,失去焦点时啊,就是处于一个不活动状态, 就是失火啊,不活动啊,活活活,活动状态,是啊,处于不活动状态时,就是我们所说的停用失火,这就是我们这个时间啊,那么显示 显示属性就是隐藏与显示的时候,是吧?那这个世界也可以好,比如说我们隐藏与显示,就与他来说吧,他有做显示与隐藏,那么显示与隐藏这一个,呃操作的切换中间呢?我们他的维维的波就是可见性 是在变化的,是吧?好,这一个呢,就是我们的 variable 属性是好, variable 属性之 改变后,对吧?好,改变后发生,或者改变时发生,改变时发生,对吧? 好,那这一个来对应着我们也可以来做一做啊,我们就显示啥嘞?比如说,哎,我们这一个,这个时候显示的时候,我们就输出一个,哎,我们 form 一, 哎,如果说为处嘛,对吧?或者我这个样子来写一符我 this 点为处,我就输出,哎, form 一 已显示,对吧?好,已显示,否则我在这里边 else, 我 在这里边就输出 form 一 已,怎么样?隐藏好,已隐藏,对吧?我并且通过一个跟踪状态吧,来输出表示当前这一个 form 一 的状态。比如说这个时候啊,这个时候我点击, 是吧?我点击这个时候我把这个断点去掉了啊,继续,那么这个时候嘞,对应着 我们在这里边就是他已经显示,但是这时候切换失去焦点了吗?是不是?好,这个时候,呃,这一个, 接下来啊,我们在这里边啊,我们在这里边,比如说隐藏好,这里边就会显示 for 一 隐藏,那么进行了这一句输出和这一句输出,至少说明了一点,就是在这个显示和隐藏之间切换, 我们这一个都触发了这个事件,对吧?当我们显示的时候,这一局输出了,说明进入了这个事件,当我点隐藏了这个窗体,这里又输出了,说明又进入了这个事件,也就印证了我们这边所说的属性子发生更改时 触发,对吧?触发这个事件,对不对啊?就是这个样子的事件呢,就是我们这一个控件呢,会创起他触发了某个动作的时候,是吧?那么这些动作的话,比如说加载、激活、停用、显可见性改变, 对吧?它这一个就是这个值发生改变的时候,这个值发生改变的时候,它会去触发这个事件,也就会去执行我们给他提供的处理程序,是不是?好,这是我们的啊, visible 欠缺的事件啊,这个大家有没有问题? 没有问题,我们接下来来说这一个 form closed, 对 吧?和啊 form closed 这一个嘞,是将要关闭窗体时发生,对吧?我们可以在窗体要关闭前去做一些清理工作或者释放工作。呃,相关的一些释放工作,那么 form close 的 嘞是关闭后 执行的这个关闭后发生,是吧?在这里边嘞,我们就只能通过控制台去跟踪这一个结果,可能会好一点啊,可能会好一点 好,在这里边最好是通过断联走,看通过断联走能不能影响这一个啊?影响这一个好,因为在这里边我们不是有做这一个关闭吗?对吧?好,做完这个关闭,所以我们来做 phone 一 的好,做 phone 一 的这一个关闭嘞,在关闭前,比如说我们要去 处理点什么,是吧?处理点什么?或者直接做他的关闭也可以。他的关闭嘞,就是我们在关闭前,比如说你要去 哎做一些处理,或者说我们要退出应用程序吧,对吧?比如说这个是主页还是做他?这个是主页,我关闭他,我整个应用程序都要退出,因为我们默认的时候这个启动页是这一个。 嗯?启动页是什么?启动页是我们的登录窗体,所以他的关闭,对吧?他的关闭就会退出应用程序,我们这边来实现来做一下啊,比如说这个时候 我点击这一个啊,关闭,你看它立即会退出,但是嘞,我这个时候我如果我点击这个关闭,它只是关闭我们这个 form 一, 不会 关闭这个,更不用说退出应用程序了。所以呢,我们有的时候,比如说这个 form 一 呢,作为我们的主页,我希望我关闭这个界面, 点击这里的关闭嘞,我退出应用程序。那么这个时候嘞,我们就可以用这个窗体的 form closure 事件啊, form form form 啊, form closure 事件这个事件的话啊,我们就可以在这里边来做退出处理啊,就是窗体将要 关闭时发生啊,要关闭时发生,我们可以这种来来做我们的系统退出处理, 对吧?退出处理,那么退出处理嘞,在这里边我们是这样的啊,我们是这样的,就是我们可能关闭的时候嘞,希望你提醒一下,我们可以在这里边弹出一个消息框啊, message box, message box, 点 show 啊,来弹出消息框,也可以弹出问题的,写怎么样?我们就写你确定要退出系统 啊?退出系统,我们这里边也就讲了退出的,哎,完整处理了啊,这边消息就是退出提示啊,退出提示好,然后嘞,第三个按钮就来显示我们这个消息框的按钮形式,比如说我们显示成 ok, 就是 确定取消,对吧? ok, 看谁哦,啊?这样的一个,呃,呈现我看一下怎么不对嘞, 好, ok, 看谁哦,啊,是这样的呀,是不是?好,然后再来弹出一个显示设置我们的消息框的图标, messagebox iq 这一个来问题吗?我们就设置为扩展,如果这一个我们会这一个这种消息框问题,消息框的话,他会返回一个,哎,这一个消息框的一个结果啊,就是对话框结果, dialogue result, 我们如果是 ok cancel 的 话,点击确定嘛,就得到一个 ok 的 结果,如果是 ok 嘞,我们就在这里边做退出处理。好,退出处理,然后 else 嘞,当我们点击取消,就说明我们怎么样 不关闭顾,别不关闭的话,一定要把我们的 cancel 设置为处。这句话的意思是什么呢?这句话的意思是,嗯,这一个指示我当前这个事件是否被取消,这里边我们 设置为处的意思就是,取消,关闭,取消,关闭,对吧?好,取消,关闭。好,那么退出在这里。原来我们常规小伙伴说,哎,那退出应用程序这个简单呀, application 点 excel 啊,对不对?我们小伙伴可能是这样想的, 好,关闭所有的,哎,这一个,呃,窗体,对吧?好,关闭当前所有的窗体。当我们这一个,呃进行过后啊,这个消息框还进行过后,那么在这里边的话就怎么样要 啊这一个退出应用程序,所以我们点击登录,比如说点击这里的关闭,我们就希望退出应用程序,这里面就有个提示,当取消我们就不关闭,没问题,当确定了我们这个时候它出现两次,这个就不合理。问题是什么呢?问题就是我们这个地方不应该用 excel, 而应该用 exetree 的。 好, exetree 的 这个呢,就是退出我们的消息循环,当前县城上的消息循环,并且关闭 这个县城上的所有窗体啊,所以要用这个啊,对吧?退出消息循环,退出消息循环啊,退出消息循环并关闭 所有窗体啊,当然也就包含我们这个主窗体和其他窗体。好,所以这样做了过后,我们来做这一个主页的关闭。好,点击确定 就退出了,是吧?好,是这样的一个效果,这就是我们的 form closure, 所以 我们如果说要在一个窗体关闭前去做一个提示,或者做,呃,提示确定退出过后,在这之前呢,我们很可能还会去怎么样的一个 处理一些啊?我们的清理工作,对吧?好,清理工作之类的。好,这一些就在这里来进行,如果没有,那直接就点击退出啊。点击退出,为什么这里要这样做?因为这个 form 并不是启动窗体啊,并不是启动窗体, 明白没有? ok, 好, 这个 form 确认事件大家清楚的啊,我们走个小 e, 那有没有问题?没问题,我们小一走起来, ok, 嗯,好,我们课堂小伙伴有没有问题这一块有没有问题? 能不能理解好,这一个很重要啊,我们以后在做 winform 系统里边做主页的退出系统功能,我们就要这样做啊,类似于这个样子来做。 好,那么接下来我们就来说还有一个和关闭相关的事件,就是关闭的,哎,已关闭 from closed 这个事件呢?是关闭后发生这一个嘞,什么时候发生?我们来调试走一下啊,调试走一下 看能不能进入啊,然后在这里边的话,就是我们的 form closed, 对 吧?好, form closed 这个事件的话,对应着我们走,先走个断点来看一下啊,看一下,我们比如说登录好,关闭确定好, 对吧?也就是这里走了过后啊,这里走了过后我们走到这里啊,再来一次, ok, 好, 我们在这里边点击登录, 是吧?好,显示点击关闭失去焦点,这个弹框也会让他失去焦点。确定好,这里边做退出,退出过后嘞,他就会走到 form close 的 时间里边, 所以这一个嘞,其实是在我们做了关闭处理之后,窗体已关闭后发生。好,这里边就是我们窗体已关闭后发生啊,已关闭后发生。 一般的这个事件我们不怎么用啊,这个事件啊,很少用,很少用,除非关闭过后还要做处理,很少用, 但是你们我们要知道啊,这一些事件的发生点。 ok, 好, 再来的话,这个事件和这个事件差不多,都是我们在尺寸改变的时候,对吧?这个是我们调整大小的时候发生。 resize, 好, resize, 我 们就以它来说吧,好用,就在主界面来说啊,在这里边啊,进入到事件列表,我们的 resize 啊, resize, resize 的 话就是调整大小时发生。好,我们在这里边做这么一个事啊,做这么一个事,在这一个嘞,我们就在这个登录界面我们放一个标签, 放一个标签,这个标签呢,就来显示他当前的这个尺寸,我们把这一个,呃,他,嗯,这一个 背景色我们改成这一个黑色吧,深色一点,把文字颜色我们就改成这一个白色啊,白色这个效果,把这一个自动大小我们去掉啊,改成手动大小,这样看着显眼一点啊大家,然后这一个来,我们就 居左显示啊,居左显示 number 二,好,所以呢,我们就在这个逻辑页的后面啊,就来这一个 number 二,它的这一个 take 是 number 二吧, 我们来看一下啊, number 二啊,对, number 二, number 的 take 呢?我们就等于啊,它的这一个窗体大小啊,窗体大小,这里边我们写一个宽好,写一个宽是多少? 我们来跟踪一下,看它的变化啊,这个事件,当我们调整大小时,如果这个事件触发了,我们就在这里边啊,就是 this 点 y 的 好,然后接下来就是高宽高嘛,好高,就是我们 this 点 hit 啊, hit 好,他的大小尺寸是怎么样?如果我们调整大小时触发了这个事件,这个这里边的值呢,就会随着我们的调整而变化啊,大家看啊看,是这样的, 窗体的大小是吧?窗体的大小好,就是这样的啊,所以我们调整大小时啊,就会发生 好,调整大小时就会发生,就是这样的一个情况啊,对吧?这样的一个情况好。另外我们和它相关的还有一个事件,就是 size, size 欠记的啊,尺寸发生改变,这个事件呢,就是 size 属性发生变化,那当我们调整大小时,它的宽高会变,宽高会变呢? size 也会变,所以这两个事件基本上是差不多的啊, size 欠记的, size 欠记的。 三千几的,我们也可以这个样子来写啊,也可以这个样子来写。把这边去掉,我们显示这里,大家来看啊,我们在调整大小时来看变化 好,哎,这个没有发生是吧?应该说会发生呀,但是没有发生,就是尺寸发生变化的时候,对吧?尺寸发生变化的时候,这边没有发生,我们来看啊, 调整大小时,应该说尺寸会变呀,宽高会变,尺寸就会变,是吧,但是没有是吧?好,那在这个地方我们什么时候来发生呢?这个就和我们想象的不太一样了,但我觉得他们应该是差不多的,是吧? 应该是差不多的 size, 欠记的。我们的这一个当前尺寸啊,这边呢,我们对应的要这样来写啊,不能写直接 x 点 y 的,是了,要 x 点 size, 尺寸其实在变的。 size 点 y 的是好,然后 x 点 size 点黑题啊,这个样子 他就可以了啊,他就可以了,所以在这里边的话对应到我们这个时候来调整啊,来调整。哎,这个时候也没有嘞,不合理呀,是吧? size 当前尺寸宽高,嗯,这一个 size 也宽高,为什么没发生尺寸发生改变了呀,对吧, 我们宽高的尺寸我们可以来获取一下嘛,然后在这里边对应着我们 size size 点宽嘛, size 点高嘛,当我们宽宽高发生变化了,是不是标签没变? 对啊,我还,哎,哎,错了错了啊,哎,这一个,今天刘老师犯一个大错误啊,刚刚点到控件了,是吧, 不应该点空间,应该点窗体,注册窗体的事件,我就说怎么不变,对吧,不合理, 对吧?不合理,因为宽高变就相当于塞子在变呀,是不是?我就觉得嘛,是吧。好,所以李老师这边出现了一个小失误,是吧,好,这边报错了啊,报错了,我们把这个事件取消,把这一句代码取消啊,这个时候,所以李老师 思路没变,只是我们注册事件的时候出现了一点小失误啊,好,这个时候啊,是一样的,是吧?哈,是一样的,就算没有写赛字,我觉得也应该是一样的啊,比如说我没写赛字的时候, 好,我们再来一次啊,对吧?我觉得这两个事件因为按照我的理解应该是一致的啊,所以这一块应该是没问题啊没问题,这两个事件是一样的,是吧?是一样的, 他只是说世界名不一样都是怎么样,这个是我们这一个调整大小时, 对吧?啊?调调整大小时发生,调整窗体大小时,窗体大小时发生,而这一个的话是我们的这一个窗体,窗窗 窗体这一个尺寸,窗体的也是尺寸吧,就是 size 的 值改变时 发生。那为什么我们说这两个事件是一样的嘞?是因为,哎,我的尺寸发生改变是吧?他的宽高是不是就会变?那宽高嘞又封装层宽高嘞可以实体化,他的 size 也是他的尺寸,所以呢,宽高变化他的塞子也会变化,所以这两个世界基本上是一样的啊,我们可以理解为是一样的。一个呢就是塞尺寸吗?一个就是它的大小吧,宽高了也就封装了。 塞子呢就是最宽高的一个封装吗?是不是?你看我们这一个窗体空间啊,他的这一个塞子对吧?塞子 就是空间的大小是吧?那么大小嘞,里边就包含的是宽高是吧?宽宽高,所以嘞,这个理解是没有错的啊,是没有错的,就是这这么回事。 哎,对,刚刚这一个脑门改变是不小心注册到标签了,但是我没发发现啊,我以为我注册的是窗体,以为是注册的窗体,不小心选到空间上了啊,选到标签空间上,这个嘞是从会的时候发生。 窗体重绘,窗体重绘呢,就是我们重新去画它的外观,你要让它外观的改变,我们就要去重画,是吧?好,我们就要去重画,比如说这一个,我们要去重画什么呢? 我们去给他画一个边框吧,对吧?可以给他啊画个颜色什么试试。那么比如说这一个当前,就以这个窗体为例吧。好,这个时候我们先选窗体啊,别再换同样的实物了。好,这边呢,我们就有一个 p 开头的啊,叹气 喷嚏。就是控件重绘的时候,发生窗体也能重绘窗体,他也是一种空间啊,对吧?一种特殊的界面空间,那么在这里边呢,我们就可以,哎,这一个重绘我们后面会讲啊,讲这一个,呃, 讲我们的控件开发这一块设计了 gda 加,那么控件的重绘就是通过他的, 哎,这一个空间的,哎,这一个绘图对象来进行的,我们可以给他画什么呀?画边框,画一个矩形边框啊,这个矩形边框呢,对应着我们用什么颜色显眼,比如说画个红色吧,先不说好不好看,然后他的尺寸 啊,他是一个矩形区域啊,我们就遛一个矩形,然后这个矩形呢啊,我们往里边走一个左上角,对吧?矩形的位置,左上角坐标好,然后他的宽高就是一点, 可离瑞坦口,对吧?好,瑞坦口点这一个宽度,对吧?宽度嘞,因为,呃,这一个往里边缩一,所以两边呢就减二好了,然后他的这一个高度 黑体也是减二,对吧?好,我们画一个这样的一个尺寸,对吧?画一个这样的一个尺寸的,好,然后这样默认发的这一种呢?他的界面啊是一,你看我就画了一个, 画了给这一个界面,对吧?界面里边标题栏部分不是属于窗体的一个工作区,我们画的是工作区域里边,你看我们就画了一个矩形,是吧?画了一个矩形, 然后呢我们还可以后续的话还可以给这个界面呢,哎,这一个工作区域你可以画一个圆角,对吧?好,画一个圆角,这个样子要把底色设置为透明啊,这个样子效果才明显,这种呢就是重绘,重绘对吧?重绘 这里边的话,重绘我们这边就给他画的是一个边框,是吧?画的是一个边框 这种效果,对吧?那么所以在温 form 里边很多形状呢,我们都是可以画出来的,是吧?可以画出来的, 可以画出很复杂的东西,也可以画出很漂亮的东西,比如说已经画做一个空间,它的形状吧,比较不规则是吧?是又有什么圆,又有弧线什么什么的,画一个组合,图形特别复杂的,还可以渐变,有那种 看起来怎么样很立体的效果,你也是可以发出来的。只不过吧,在我们温放里边的 g、 d, i 加通过它去画 特别费劲,因为它里边所画的任何的东西它都有一个位置,所以会出现很多的坐标,那么你要要讲你画出的图形会 随着这个空间的尺寸呢而自适应的变化,那么我们会的时候尺寸呀,坐标这些我们都得去 计算,所以这也就是它的一个复杂度所在啊,复杂度所在。好,那么至此呢,我们在这里边就把 for 们的这几个常见事件都给大家过了一遍,主要小伙伴们一定要,呃,怎么样注意的就是第一 note, 第二的话 for 我 们 closure, 第三的话我们今后会涉及到重绘啊,涉及到重绘主要的话可能就这几个时间,但是我们讲过的是这几个嘞,小伙伴们也清楚一下啊,这个嘞,也就是我们今天的第一块 方法和实践啊,这一块对于窗体对吧?很重要啊,所以这边我们都讲的比较细一点。 ok, 这是我们今天的第一块内容,小伙伴们关于窗体的常用方法和事件的一个讲解,大家都清楚啊,都明白的啊,我们扣个小一。

海康 v m 嵌入上位机后,有人说太丑了,也有人说看着挺清爽的,每个人审美不一样,我们使用支持酷高、雷赛真运动和 prc 的 通用上位机原码来讲解,我这里直接使用皮肤的方式,不改变现有空间,大家看一下,什么都没改的,先给大家看下效果,我们直接变异运行, 我给大家看一下这些细节,你看这些透明的悬浮的这种状态,然后在这里,在这个方向键上面这些大家拿到原码可以自己去改,我们看一下程序编辑里面随便录一些点 都可以的,这些大家拿的皮肤可以自己改,这些悬停都有的,我这里只是起到一个抛砖引玉的作用,微字母它是可以做得很漂亮的。 然后左边的话是我们的原版,右边是我们挂了皮肤的,我们进去看一下它有哪些不同,看一下这个 display, 其实就这里一些简短的代码, 然后这个 ui 控件的,你看它都是一坨一坨的,这里直接复制粘贴就可以了,你看这里新增了一个函数,调用一下就可以了,你看直接全部复制粘贴就可以出现视频中的这个效果,想要视频中的原码,并且想和我有更多交流的,可以在吴大郎那里搞个加密狗。

上位机新人面试一百分第十二讲 vfo 的 消除页面闪烁,我是大家小伙伴上位机老王。在新人面试的时候呢,面试官往往去问一个很常见的问题, 上一期页面开始的时候呢,是否会出现一个刷新闪烁?我们来看一下什么是叫做刷新闪烁哈, 这里我们点击下这个代码可以看到哈,我们当前这个页面下是不是会出现这种 空白的情况下,然后会出现这种并没有完全刷新出现条的情况,那么一般情况下我们称之为叫做刷新闪烁,那为什么有这种情况呢?请大家听我来娓娓道来。 好,面试官呢,他想问大家什么问题?就是你是否能够去熟练的应用 winform 呀的双缓冲机制来解决页面的刷新闪烁? 好,我们先去了解一下 vfo 的 绘制底层的方法叫做 jdi, 准确来说叫做 jdi 加的方式。那为什么我们出现一个页面的白色闪烁呢?我们要去先了解一下 vfo 它的一个刷新机制哈, 我们把当前的一个页面呢,比如说老师去黑板上去写板书,那老师会怎么做呢?他是否是先要把这个板书的文字哈,比如说这是我们的数字的一, 这是我们的数字二,数字三,老师在写的时候,那他要先做什么呢?先把这些的信息哈,先给他清理干净了, 然后呢再往后重新去一笔一划的去追加信息哈,比如说我们大家写四的话,那我们的电脑是怎么做呢?他是两个步骤,第一个步骤呢,把信息清理干净成了一个空白的区域 好,然后呢再去在上面呢去写下数字四哈,你看二三四,那一来一去的时候呢,我们就出现一个完全空白的情况, 所以我们的黑板呢就出现一个不断的一个闪闪白的情况,并且呢我们信息量如果很大的话,那会导致我们的越写越慢的情况 啊。最后我们在使用 jdi 加绘制的时候呢,它是先插除了整个的空间区域,变成了空白或者背景色,然后呢再对整个区域进行一次重绘, 如果我们的软件啊需要进行实时刷新去显示个图标,那么就相当于一个老师,他在一秒钟进行擦除黑板,去写板书三十多次,那页面上就会出现什么呢?是吧?控件会闪烁无数刻空白的瞬间,界面呢会出现一次次的卡顿, 因为你的人眼啊,不但要捕捉这个刷新,对吧?空白处还有下色清晰处,那么人眼在看到程序的时候呢,就会觉得自己非常疲累的,非常头晕的想关掉程序。好,那我们怎么样去解决呢?其实用一个隐藏代码哈,我们再看一下效果, 点击之后我们点是 normal, 然后呢我们用一个东西叫做 double buffer 双缓冲,我们再看一下它就并不会出现这种 清除为空白,然后再去显示情况了。好,这是我们说的双缓冲,那双缓冲它又是怎么做的呢?首先我们先去想一想,如果说我们去 在使用这种,对吧擦除的话,如果不擦干净直接去写的过程,能不能去可行呢?当然是可行的,但是呢他会出现这种新的画面,没有遮盖出旧画面的情况,出现残影就上身的痕迹,那这种情况呢,我们在机视觉检测中呢,往往叫做什么? 是不是叫做飞拍托影,高速相机在拍摄的时候呢,如果他的这个曝光时间和他的拍照时间呢?是吧?没有设置好的话,会出现一个飞拍托影,就是说他的上一次的采集的图像哈, 不能完全覆盖出一个旧的画面情况下会产生效果,那我们有什么办法去处理呢? 那第二种方案呢,就是让我们擦和画呢在同步进行中,这是我们说的双缓冲, 所谓双缓冲呢就是我们哈给大家说一下,原先的操作上是只有一块黑板,而现在呢我们建立一块缓冲区域,缓冲区域中呢,我们完成了这个擦和画的过程,这里是擦除哈,擦除 擦还有画画的过程,我们把这个画东西呢再贴到我们的程序上面。好,这个是我们的窗口 窗口,这个是我们内存,我们通过在内存上呢设置一张槽口纸,在上面经过擦,然后进行画新的图像的过程,把画出新的图像呢,我们贴到窗口之上, 这样子设计一个额外的缓冲区域呢,我们就称之为叫双缓冲,那么双缓冲的结果就是下次的新的会使呢,把新的图像或者是好再填充到界面之上。 好,我们看一下我们这个项目上双缓冲给大家是怎么样去实现的哈,其实呢代码是非常简单的,我们进入它的这个事件上。好,这里我们看一下, 可以看到双缓冲和普通的设置呢,它其实就是多了这么一行代码, 这个 double buffered 就 足够了,那它就能触发了双缓冲了,上面这个设置为 force, 你 就告诉我没有设置双缓冲,然后呢就能完成这样效果,我们再运行去看一下哈, 等一下可以看到这样效果呢,就非常的对吧?非常好的,并且我们这数字刷新中呢,它不会像我们这种不设缓冲的时候这种,对吧?出现叉除再显示的效果。 当然了我们还有几个问题点哈,那第一个问题点, this w buffer 的 这句话是否能够解决所有空间的问题? 当然是不行的哦,这个 race 它指的是我们的一个窗体,我们再看下代码,它当前指的 race 指的是我们这个凤仪的创建,他并没有是进行每一个空间的低规调用的,所以我们在写他的时候,用他的时候呢,我们是要去设置个低规调动情况把,让每个空间呢都尽可能去设置到双缓冲的效果。 我们这边要开启个低规,并且呢把每个空间尽可能都去触发他的这个双缓冲的这个设计值 啊,我们再去想想第二个问题,为什么我们的表格之类的空间呢,他会刷出现这种刷新空白的情况呢?说表格类空间,他是有很多的信息哈,比方说哈,这边一条数据,两条数据,三条数据,每个数据呢,他都同时存在行和列, 那我们在设计的时候对吧?表格信息上呢,他这么多信息要进行不断的填充,那为什么没有出现这种情况呢?结果呢?大家也能猜到想到,因为我们表格空间默认他是启动了双缓冲机制,而我们的历史 vivo 呢,他这边启动叫做虚拟模式的一个效果, 默认情况下开启了双缓冲控件呢,它就并不会进行这种刷新白屏情况。而我们的像 pano, go box 这类控件呢,它没有去默认开启双缓冲,所以呢,它在高速刷新情况下呢,是会出现这种刷新白屏的效果。 好的小伙伴们,我们再回顾一下哈。如果你的面试官再去问你这个关于页面是否遇到过刷新白屏,刷新卡顿的问题,那么我们的回答呢,尽可能去聊一下这个双缓冲机制。如果我们能在面试中呢, 告诉我们面试官什么是刷新白屏,它是因为我们的微 form 的 gdi 的 绘制方式导致的。我们如何去解决这个问题,以及这个刷新白屏中 双缓冲他的一个工作的原理呢?我相信大家一定能够拿到这个面试一百分哈,我们一起努力,跟我一起加油,我们争取都拿到面试一百分。好,再见。

大家好,图家软件在这里给大家推荐一款免费的桌面充体置顶工具。置顶王我们经常会用到有的派的记事本,但是记事本窗体不能够置顶, 那么通过置顶王我们只需要在窗体的标题栏单击右键鼠标指针,移入皇冠图标即可将窗体置顶, 可以看到方体置顶, 还有我们经常用的 windows 便圈是这个 也是一样的问题,不能够置顶, 那么还是通过置顶王可以轻松的将其置顶, 谢谢大家。