#中常见的按键事件
一般情况下,按下一个键时,事件的触发顺序是KeyDown -> KeyPress -> KeyUp。
C#语言中的KeyPress事件和KeyDown事件都是针对键盘按键响应的事件,其区别如下:
KeyPress事件在按下字符键时触发,即按下字母、数字或符号键时触发,而不会在按下控制键(例如Shift、Control、Alt等)时触发,也就是说无法捕获非打印字符和功能键(如F1-F12、Shift、Ctrl等)。该事件主要用于响应输入字符的操作。
KeyPress事件的参数类型是KeyPressEventArgs,其包含了一个叫做KeyChar的属性,表示按下的实际字符。例如,按下“A”键时,KeyChar的值为'A'。
KeyDown事件在按下任何键时都会触发,包括字符键和控制键。它可以用于处理按键的状态信息(例如是否按下Shift键等)以及响应输入非字符的操作(例如方向键、回车键等)。
KeyDown事件的参数类型是KeyEventArgs,其包含了一个叫做KeyCode的属性,表示按下的键的键码值,可以通过该参数获取按下的键的信息,如键的代码、修饰键状态等。例如,按下“A”键时,KeyCode的值为Keys.A,按下Shift键时,KeyCode的值为Keys.ShiftKey。
总结:
KeyPress事件主要用于捕获字符键的按下动作,并获取按下的字符。
KeyDown事件可以捕获所有键的按下动作,包括字符键、非字符键和功能键,并提供更多键的信息。
两者的含义和用途不同,需要根据具体的场景选择合适的事件来处理键盘按键。
击关注,静心科技为您提供不一样的静心视角。
现如今,科技高速发展的速度已经远远超出我们的认知。移动支付、短视频、共享经济等全新互联网科技模式已经完全改变了我们的生活方式。也许你还在思考过去的变化是如何发生,下一个深刻科技变革已经在我们身边开始孕育发芽。
5G快速商业化,让大家惊叹这快速发展的通信技术的同时,开始期待5G会带给我们什么变化。而这一切的改变,离不开互联网的支撑。正是因为互联网打通了国与国、人与人之间的知识壁垒,大范围的知识分享促使科技的快速发展。
但是,目前有多少真正了解互联网的人应该不多,甚至现在有很多人开始扬言互联网已死。的确,互联网已经沦为一种实用工具,我们想要获取什么知识资源,只需要在网页上搜索即可。但是当你输入网址,并按下回车键之后,后面发生了什么?估计知道的人更少。
那普通大众为什么要知道这背后过程的原因?
因为如果你知道互联网的信息传递过程后,你就能够解释信息是如何从一台电脑传输到另一台电脑,你就能够解释为什么曾经一位华尔街的交易员耗资3亿美元选择凿穿阿勒格尼山脉来修建一条笔直的光缆,你就能够从另一个侧面解释为什么现在全球各国要大力发展5G网络。
每天,我们都会打开某个浏览器,然后点击或者输入网址,如“toutiao.com”。或者借助百度、360等搜索引擎来搜索关键字获取资料。但是当你按下回车,你选择的网页将出现在你的手机或者电脑屏幕上,你知道背后发生了什么?
在讲述网页之前,我们首先需要明白什么是网页地址。每个网页都有自己的地址,就像每一栋建筑都有自己的地址一样,其表现形式如“https://www.toutiao.com/ch/news_tech/”。有了这个地址之后,不同的人就可以访问到相同的网页界面。网页地址也就称为“统一资源定位器”,简称URL。
但是当你在地址栏上输入“toutiao.com”的时候,浏览器会自动补全URL的其他部分,变成“https://www.toutiao.com/”。那么URL的其他部分代表什么?当浏览器获取到完整的URL之后,浏览器将URL分解成几个部分,由此来确定需要打开那个网页。
URL的第一部分为“https://”,也就是所谓的协议,该协议将定义浏览器该如何连接指定网站。目前访问互联网有两种协议,超文本传输协议(简称HTTP,显示为“http://”)以及超文本传输安全协议(简称HTTPS,,显示为“https://”)。两种协议基本没有区别,唯一就是HTTPS会加密用户信息,从而防止信息受到黑客的攻击。
因此,一般如果你需要输入密码或者个人信息的时候,网站会要求使用HTTPS。
万维网
URL的第二部分就是“www”,也就是我们经常说的万维网,简称为Web。有些网页地址会不显示“www”,说明“www”并不是一定需要。但是为了URL的完整,一般网页地址会显示“www”。“www”就像是手机号的区号,一般情况是不需要自己输入的。
而URL剩下的“toutiao.com”就是网站的“域名”。每个网站都有自己独特的域名,但是浏览器并不是用域名连接网站,而是通过“IP地址”的数字代码来连接网站。每个网站一般至少有一个“IP地址”,就像我们的手机号一样。为了将域名转化为“IP地址”,需要用到域名服务(简称DNS)。
域名服务就像是一个巨大的“电话簿”,列举域名对应的“IP地址”。因此,浏览器会在硬盘上寻找缓存的“域名—IP地址”网页访问记录。如果找不到,则会采用互联网服务提供商(简称ISP)提供的DNS查找域名对应的“IP地址”。至此,浏览器知道如何通过HTTPS访问IP地址对应的网页,并将这个访问请求打包给该网站对应的服务器。
DNS的查询模式
网站服务器接收到访问请求后,先会做一些计算来准备用户访问的界面,然后将呈现网页所需的代码发给浏览器。浏览器利用这段代码在计算机和手机上显示相应的网页界面。自此,一个输入网页点击回车后发生的全过程就完成。
现在,我们应该知道浏览器是如何通过互联网连接网页。但是,网站服务器是如何将用户所需信息发送到手机上或者电脑上?信息的传输是一个循序渐进的过程,其中涉及到网络传输协议(简称TCP)和互联网协议(简称IP)。
由于网页响应数据过大而无法一次发送,为此,TCP将数据信息分成许多“小包”,并为每个“小包”编号。然后服务器将通过DNS来查找用户端的IP地址,并通过IP地址将数据发送给用户端。由于目前很多网站服务器存在比较分散的原因,IP通过几次转移后,将数据包最终发送给用户。
但是可以肯定的是,无论IP中转多少次,最终数据包都会达到目的地。当用户端接受到数据包后,TCP按照正确的顺序重组数据,并检查数据是否存在丢失的问题。如果存在数据丢失的问题,用户端将再次请求网站服务器发送丢失的数据。
简单来说,TCP工作就像是物流点的拆分和打包,而IP就像是物流快递。掌握这些协议,你也就了解几乎所有的通过互联网获取信息的全过程。无论是电脑访问还是手机访问,都会经历同样的过程。
数据包的传递路径基本都是由一台电脑传输到另一台电脑,但是数据包并没有直接直穿国家,而是必须遵循地理的限制,沿着物理光缆传输。这也是信息是如何实际从一台电脑传输到另一台电脑。
2008年,华尔街交易员丹尼尔·斯皮维在芝加哥证券交易所(芝加哥南环路)和纳斯达克的服务器(新泽西州北部)之间搭建一条近乎笔直、长1327km的光缆。斯皮维严格要求笔直,导致施工人员不得不在阿勒格尼山脉中开凿隧洞,造价高达3亿美元。
为什么不选择有迂回且施工简单的路线?为什么热衷搭建一条直线光缆?
光缆是信息传递的介质,信息在互联网上传输的过程都要通过长长的地下光缆。光缆是由玻璃纤维组成,当计算机使用TCP/IP进行数据传输时,就需要光缆将计算机中的“0”、“1”转化为光亮变化,其传输速度可达到光速的2/3。
两点之间直线传输距离最短,但是光缆传输速度已经很快,为什么还需要近乎直线的光缆?这种极致追求传输速度是否让我们理解这种开凿山洞建造光缆的行为?
美国许多高频交易股票就是在纽约证券交易所和芝加哥证券交易所进行交易。高频交易就是利用两所交易所细微的股价差异赚取差价。例如在纽约证券交易所以1.0美元买入,然后在芝加哥证券交易所以1.01美元卖出,这种套现的过程稍纵即逝,因此对互联网传输速度就提出了很高的要求。
高频交易
据测试,斯皮维的光缆在两地之间的信息传输只需要13毫秒,比之前快了3秒。目前,光缆仍然是主要的数据传输介质,尽管仍有通过巨型激光在空气中实现信息传输,但是由于其好耗能而没有得到应用。
那么这种追求极致网速提升带来的经济效益到底有多大呢?目前没有直接的数据表明,但是从“首批签约使用这条光缆的200家高频交易商愿意支付28亿美元”这个事实就可以看出,这条光缆背后的经济价值不可估量。
现如今,全球各国都在大力推动5G技术的发展,根本原因就是在于看重超大连接、超快宽带、超低时延的5G网络背后所带动巨大经济利益。
那么未来,大宽带、大连接、低时延的5G网络是否能够代替光缆?很大概率是不可能的,根据香农定律,5G网络的高频导致网络传输能耗缩减,因此也很难实现大范围长距离传输。但是对于短距离的信息传递,5G网络中继也许能够减少因光缆铺设、凿山洞等减少成本。
对于这种长距离基站之间的连接,光缆目前仍然是首选。但是基站到端之间的信息传输如果采用5G的话,势必使得那些对时延要求过高的场景得以实现,例如自动驾驶、虚拟现实、云游戏等。
总而言之,互联网通讯技术的发展不仅使得网络传输速度更快,而且因网络传输提速将会催生很多新的产业,从而带动经济的繁荣发展。
不断涌现的新科技背后,离不开互联网通讯技术的支撑。正是因为互联网,世界资源的联系也更加紧密,从而进一步推动科学技术的发展。
了解互联网背后通信技术的实现过程,有助于我们掌握一些蕴含在互联网技术背后的基本概念,进而理解一些互联网科技发展过程中的一些现象,包括对互联网传输速度的追求。未来网络通讯技术也不会止于5G、6G,未来也必定有更多超出我们想象的事物发生。
你们怎么看互联网通信技术,欢迎在下方留言评论。
使用Vue开发前端页面的时候,难免会遇到接收的字符串过长,需要让字符串换行。以往在HTML页面开发中,常用的方法是word-wrap:break-word;添加上这行代码后,在块元素定义的宽度不够时输出的文本内容就会换行。但是在vue中使用word-wrap属性就不起作用,网上查找资料说使用white-space:pre-line;就可以实现换行。本文就简单介绍下white-space的使用。
因为我没有系统的学过前端,就是遇到一点问题学习一点前端知识。当我在这次实现换行效果的过程中就学习使用了white-space的用法。
首先按照网上的资料,直接添加white-space:pre-line; 是实现了换行,但是换行却是从第二行中间开始的。具体效果大概如下图:
为什吗会有这个效果呢?第一反应是有空格产生了,哪里来的空格呢?那就是接收的后端传递的字符串中有空格,于是就想办法去处理接收的变量,尝试了以下两种方法:
(1)添加一层盒子嵌套,父盒子font-size:0,子盒子font-size:12px;
.tabBox_tit {
border: 1px solid red;
width: 175px;
height: 50px;
white-space: pre-line;
font-size: 0;
margin: 0 2px 0 10px;
letter-spacing: 1px;
box-sizing: border-box;
}
.tabBox_tit span {
font-size: 16px; /* 根据需求设置具体的字体大小 */
}
/*说明如下:
将 white-space 属性的值从 pre-wrap 修改为 pre-line,这样文本可以从第一行第一个字符输出并且可以自动换行。
将 font-size 属性的值设为 0,以去除在HTML中的空格(空格、回车等),避免产生不必要的空隙。
将 .tabBox_tit 框架内的文字大小设为 0 ,因为前面已经有了一个全局修改,
并通过 .tabBox_tit span 选择器来单独指定文字的大小,这样可以避免子元素继承父元素的字体大小。
*/
复制代码
(2)使用flex布局让内容居中
.tabBox_tit {
border: 1px solid red;
width: 175px;
height: 50px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
font-size: 16px; /* 根据需求设置具体的字体大小 */
margin: 0 2px 0 10px;
letter-spacing: 1px;
box-sizing: border-box;
}
/*
说明如下:
将 white-space 属性去掉,因为使用 flex 属性后不需要再用这个属性来控制文本输出。
添加 display: flex 属性,并设置 flex-direction: column,这样会将容器中的元素按列排列。
添加 justify-content: center 和 align-items: flex-start 属性,这样可以使文字垂直居中并从左侧对齐。
*/
复制代码
经过以上两种方式的设置,文本输出样式还是和上面的截图一样,从第二行中间开始输出。这样尝试的时候,没有实现效果,导致我怀疑自己flex布局的知识点没有学好,又去重新温习了一遍flex布局的文档。改来改去一个小时就过去了。内心有点失败的挫折感。这个时候,是不是就说明换行符号不是从变量里面传递过来的呢?
于是,再去查看代码,发现了代码被编辑器格式话之后换行了,在网上查找资料也终于瞅到有人说到这一点了。于是尝试了修改VUE的模板代码,代码如下:
<!--修改后-->
<span class="tabBox_tit line1">
<span class="font-color-red" v-if="val.cart_info.is_gift">赠品</span>{{ val.cart_info.productInfo.store_name + ' | ' }}{{val.cart_info.productInfo.attrInfo?val.cart_info.productInfo.attrInfo.suk: ''}}
</span>
<!--修改前 -->
<span class="tabBox_tit line1">
<span class="font-color-red" v-if="val.cart_info.is_gift">赠品</span>
{{ val.cart_info.productInfo.store_name + ' | ' }}
{{val.cart_info.productInfo.attrInfo?val.cart_info.productInfo.attrInfo.suk: ''}}
</span>
复制代码
让后,让后我想要的功能就实现了。到这里不得不感慨前端的水真的很深,原来代码格式化也并不是所有的代码都可以使用的。
基于以上的折腾分析,总结一下,Vue实现输出文本自动换行的效果:要做到以下两点:1.HTML代码块不能格式化换行,2.使用white-space:pre-line; 这样就可以了。
正常情况下到这里都应该写完了。但是我又有点强迫症,总觉得不能格式化的代码不好看,或者以后不小心格式化了,文本输出这里又出现问题岂不是很不美。于是去查下white-space这个属性的定义,通过菜鸟教程学习到了更好的解决方法,附菜鸟截图:
根据教程,知道了想实现换行效果又可以格式化代码使用:white-space:normal;就可以了。
以上就是前端white-space属性学习的痛苦经过。希望能帮助到你
作者:沐道PHP
链接:https://juejin.cn/post/7221341862116540471
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*请认真填写需求信息,我们会在24小时内与您取得联系。