如何在VS.NET/C# Builder开发的网页中也能实现DOS下录入数据回车换行的功能

数据|网页

如何在VS.NET/C# Builder开发的网页中也能实现DOS下录入数据回车换行的功能
北京煤炭科学研究总院经济与信息研究所 丁报圣

在DOS年代,录入数据时我们习惯了在录入完一行数据后敲一个回车转入下一行的数据录入。昔日DOS的辉煌已经成为过去,如今更加友好易用的GUI图形操作界面Windows已经进入了我们的日常生活。
1996年Windows95的出现是软件史上的一次伟大革命。Windows 是美国微软公司开发的一种图形方式的操作系统,它的出现克服了 DOS 中难记的一些命令,使计算机与人更亲近,只要轻轻点击鼠标,计算机就会完成一个动作。同时windows也改变了原先DOS下录入数据敲回车的方式,现在我们若是在录入数据时希望光标跳到下一行或下一个输入框则只能按键盘上的TAB键或用鼠标点击下一个输入框。这个改变对于没有接触过DOS操作系统的计算机用户也许没有什么大的影响,但是对于从DOS下转过来的的计算机用户却是一个鸡肋;特别是我们的数据录入人员,在DOS年代已经习惯在录入一行数据时敲一下回车继续下一行数据的录入。能不能眷顾一下这些老用户的习惯也是我们开发人员应该考虑的事情。
笔者在前不久的一个项目中就遇到了这样的问题:用户要求我们的前台录入页面提供支持回车换行的功能。做过开发的人都知道在传统windows应用程序中实现回车换行其实并不太难,我们可以通过截获键盘的回车按键值,然后通过发送消息使录入界面中的下一控件(如:文本框输入框等)获得输入焦点来达到这个目的。在WEB页面中我们也可以通过脚本(JAVASCRIPT或VBSCRIPT)语言设置WEB控件的焦点来实现。
在传统的ASP或JSP/PHP中编写的WEB应用程序中实现回车换行的功能时,我们通常的做法就是在控件的OnkeyPress事件、OnClick事件或页面中的OnSubmit等事件中写上一段JAVASCRIPT或VBSCRIPT代码捕捉到键盘回车的键值,然后人为指定跳转顺序实现回车换行,这种做法缺点只能适用于页面控件元素很少项目不大的场合,一旦页面控件元素或该类文件很多时,这种人工方式必然要消耗很大的工作量。能不能有一个行之有效的办法使我们一劳永逸?这就是本文笔者要讨论的内容。诸位看官莫急,容我慢慢道来:
我们的项目是用VB.NET开发的,前台录入界面是VB.NET程序编译后生成的HTML页面,在浏览器中运行。VB.NET开发的程序最大的好处是程序代码可以和界面相隔离,也就是相互独立;但是用VB.NET开发的程序编译后生成的HTML录入界面中的控件元素名称是很难确定的,虽然也会具有一定的命名规则。在编译前我们是无法得知编译生成页面上的可录入控件元素名称的。
这样一来我们就碰到了一个问题,难道说我们要实现DOS下的回车换行功能就只有打开一个个的ASPX文件查看其中的元素名称,然后按ASP或JSP/PHP中的做法写相应的JAVASCRIPT或VBSCRIPT代码了吗?这显然是一个让人晕倒的事实;我们的这个项目有上百个ASPX文件,要打开上百个文件一一按ASP或JSP/PHP中的做法写下JAVASCRIPT或VBSCRIPT回车实现代码简直就是奇闻。笔者通过查MSDN和反复实践找到了解决方法。
下面我将用JavaScript脚本语言为例来解决这个问题,在写代码前我得向大家介绍一些相关知识;浏览器中浏览的页面文件在JavaScript中称之为一个文档对象(DOM)。在 JavaScript 能够涉及的范围内有如下几个“大”对象:Window, Document, Location, Navigator, Screen, History 等。Window对象是Document、Location和History对象的父对象。
围绕我们要解决的问题,这里我们重点提一下Document、Form、Elements三个对象及Onkeypress事件,Document 文档对象:是指描述当前窗口或指定窗口对象的文档。它包含了文档从<head>到</body>的内容。用法:document (当前窗口)或 <窗口对象>.document (指定窗口) ; Form 对象:document.forms[] 是一个数组,包含了文档中所有的表单Form ;Elements对象:为表单元素对象,<表单对象>.elements 是一个数组,包含了该表单所有的对象;Onkeypress事件是一个键盘事件,是在用户按下键盘上的键时引发的事件。通过这三大对象再配合Onkeypress事件就可以完成现我们的要求;
下面是最终的实现代码清单:
var JumpTypeArray =new Array("text","password","textarea","checkbox","radio",
"select","select-one","select-multiple","file")//引用页面上可获得焦点元素类型
var DebarTypeArray =new Array("submit","reset","button","checkbox","radio",
"select","select-one","select-multiple","hidden")//引用页面上需排除元素类型
function inStrArray(src,dec)
{//检查给定串是否在指定字符串数组中,如在返回索引号,否返回-1;
for (var i=0 ; i<dec.length; i++)
{
if (src==dec[i])
{
return i;//定位成功,返回索引号
break;
}
}
return -1; //定位失败,返回-1
}
function checkCR(evt)
{//回车响应函数
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
var frm=document.forms[0]; //指定FORM名称为页面中的第一个
if ((evt.keyCode == 13) && (inStrArray(node.type,JumpTypeArray)!=-1))
{//判断当前对象是否为可输入对象,对象类型数组:JumpTypeArray
for (var i = 0 ; i < frm.elements.length; i++)
{//for begin
if (frm.elements[i].name==node.name)
{//定位当前对象
if ((i+1)< frm.elements.length)
{//对象数组索引越位判断
if (inStrArray(frm.elements[i+1].type,JumpTypeArray)!=-1)
{ //判断当前对象下一个对象是否为可输入组件,对象类型数组:JumpTypeArray
frm.elements[i+1].focus();//设置焦点
if (inStrArray(frm.elements[i+1].type,DebarTypeArray)==-1)
{ //过滤不可选中文本对象,对象类型数组:DebarTypeArray
frm.elements[i+1].select();//选中组件文本内容
}
}
return false;//禁止提交表单内容
break;
}
else
{//提交表单内容
return true;
break;
}
}
}//end for
}
}
document.onkeypress = checkCR;

引用说明:将上面的代码存成文件,如:WebEnter.js,然后在要实现回车换行的页面中写上:
<script language="JavaScript" src="path+WebEnter.js"></script> 即可。
Path:是WebEnter.js文件所在路径。

适用环境:Windows9x/NT/2000/XP+ASP/JSP/PHP/ASP.NET+IE4.x(及以上版本)

注意事项:
1、引用页面中不能有多个表单(Form)。
2、引用页面中不允许有重名对象(object)。

调用例子:http://dbs.myrice.com/dbs/Demo.html

最后需要说明的是:当引用页面在NS系列浏览器中浏览时,以上代码需修改,因为在NS中的浏览器对象和IE中的对象是有一点区别的,这个就留给读者练手了。

时间: 2024-09-23 11:27:10

如何在VS.NET/C# Builder开发的网页中也能实现DOS下录入数据回车换行的功能的相关文章

Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例_Android

本文实例讲述了Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能的方法.分享给大家供大家参考,具体如下: 1.布局界面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pare

谁开发过网页中的聊天工具么?

问题描述 我想做一个网页聊天工具就像csdn右下方的即时聊天一样!哪位做过相关的开发可否给个参考!或指点一下!很急!谢了!

用C++Builder开发ISAPI扩展应用程序

一.ISAPI概述 Microsoft的WEB服务器提供了不同的ISAPI,应用ISAPI能够开发出高性能的应用程序. ISAPI具有两类组件:ISAPI扩展和ISAPI过滤器,本文着重介绍ISAPI扩展的应用和开发. ISAPI应用程序通过DLL实现,DLL的特性使它能够作为WEB服务器自身的扩充来装载.在WEB服务器的地址空间运行, 而且只在第一次请求时装载一次,以后每一个后续请求通过创建一个线程(仅用一个简单的函数调用) 来完成,这比CGI创建一个进程要节约大量 的时间和空间等资源. IS

用C++ Builder开发Web程序

Web应用程序是运行在服务器端的可执行程序或动态链接库.它们可以响应用户要求,动态产生超文本页面,并将信息提供给客户浏览器. 由于Web应用程序的标准并不相同,程序的写法各异,这样就给开发者造成不小的困扰,因为开发人员不太可能了解每一种标准的写法.而C++ Builder可以很好地解决这个问题. C++ Builder将Web应用程序的开发封装成组件,使开发者面对一致的开发界面,使用一致的开发原理,惟一不同的地方在于开始产生程序时所选择的程序结构,至于程序的编写细节和方式都一模一样.本文通过两个

flex-AS3 Extension Builder开发Illustrator插件,如何指定PDF文件页码

问题描述 AS3 Extension Builder开发Illustrator插件,如何指定PDF文件页码 //file是一个传进来的PDF文件, pageIdx是要打开的PDF第几页 public function OpenPdf(file:File, pageIdx:int) : void { var opt:PDFFileOption = new PDFFileOption(); opt.hostObjectDelegate = Illustrator.app.hostObjectDele

Windows 8开发入门(二十一) Windows 8 下进行MVVM开发

在本文中将演示如何在Windows 8进行MVVM开发,首先我们准备两个辅助类如下: ViewModeBase类 : public class ViewModeBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; /// <summary> /// 属性变化时触发事件 /// </summary> /// <param name="prope

用C++Builder设计动态网页按钮

在信息爆炸式增长的今天,每天都有大量新的网站诞生,每时每刻网上都传递着难以计数的信息.建立网站来进行自我宣传和信息交流已成为一种新潮的媒体宣传方式,多姿多彩的网页也成为Internet中最为绚丽的部分.您也许已经注意到,在网络速度不断提高的今天,网站的站主们为了留住访问者的视线,开始越来越多地在网页中使用精美的动画.交互式的表单以及其他网页特效.不过我们要实现这些特效,一般都需要借助类似Photoshop.Flash这样复杂的图象设计软件,而且由这些图象软件生成的特效,字节容量往往都会很大,这相

移动开发-红米1s手机 开发时 eclipse中无设备显示,应该如何解决??

问题描述 红米1s手机 开发时 eclipse中无设备显示,应该如何解决?? 请高手解决 红米手机如何在eclipse中显示设备?? 请高手解决 红米手机如何在eclipse中显示设备?? 解决方案 你将手机插到电脑里,然后运行你的android程序,它会弹出一个运行设备选择,它会在最上面显示以你手机型号命名的一个设备,你点击运行就行了: 如果不行的话,就是你没有安装手机驱动了:你可以百度这个问题; 还有eclipse中没有显示的原因就是你的数据线连接有问题的,可以拔掉再插上多试几次; 如果回答

flexjson-Flex开发使用Json格式和数据库交互页面加载数据奇慢

问题描述 Flex开发使用Json格式和数据库交互页面加载数据奇慢 数据库使用的是Mysql.服务器是Apache服务器.使用Flex Builder 4.6 IDE .MXML所做的操作就是增删改查数据,但页面显示数据等待时间很长很长,有时要10来秒