前言

直升机的曲线调整可分为油门曲线及螺距曲线,二者相辅相成,密不可分。每种飞行模式都有其独特的曲线,影响曲线的主要因素有: 机种、级数、主旋翼翼形、天候状况及个人的飞行习惯。一般的八动遥控器对于油门及螺距曲线都提供 5个控制点,分别对应0%(L)、25%(1)、50%(2)、75%(3)及100%(H)。以下列出的数值仅供参考,您必须依照实际的需要作调整。

NORMAL

适用于停悬及静态飞行,重点是要使机体沉稳柔顺。调整时先决定停悬点(油门摇杆在½的位置)的螺距及主旋翼转速,转速的快慢依您自己的习惯而定。若您的经验未能以目视的方式来判断转速,可以请有经验的同好在旁协助,或购买一种可安装在尾管上的转速计。

1.调整停悬点:螺距约在+6°,主旋翼转速约在1,400RPM。
若停悬时油门摇杆低于½的位置:请降低油门或螺距曲线第2点的数值。
若停悬时油门摇杆高于½的位置:请增加油门或螺距曲线第2点的数值。
若停悬时主旋翼转速过快:请降低油门曲线第2点的数值,并且增加螺距曲线第2点的数值。
若停悬时主旋翼转速过慢:请增加油门曲线第2点的数值,并且降低螺距曲线第2点的数值。

2.调整最高点:螺距约在+10°。
先保持停悬的状况,然后把油门摇杆推到最高点。
若机体上升快速但主旋翼转速变慢:高速螺距过大,请降低螺距曲线H点的数值。
若机体上升缓慢且主旋翼转速变快:高速螺距过小,请增加螺距曲线H点的数值。
调整至机体上升速度适中,且主旋翼转速变化不大即可。

3.调整最低点:螺距约在-2°。
先将直升机保持停悬在适当的高度,然后把油门摇杆拉到最低点。
若机体下降速度过快:负螺距过大,请增加螺距曲线L点的数值。
若机体下降速度缓慢:负螺距过小,请降低螺距曲线L点的数值。
调整至机体下降速度适中即可。

4.调整¼及¾点
作静态动作时,油门摇杆几乎只在¼至¾处移动,所以油门及螺距曲线在此范围内仅作小幅度的变化,使得机体不会暴起暴落。建议您将副翼、升降舵及尾舵的大小动作比例(DUAL RATE)设为70%,并适度地搭配指数曲线功能(EXP),可使动作更为轻柔精准。

IDLE-UP 2

适用于3D花式飞行,重点是要使机体静若处子、动如脱兔。调整时主旋翼转速一定要快,约在1,700RPM。转速快的优点是停悬稳定、翻滚快速。但相对地转速快也会产生较大的振动,所以机体结构一定要详加检查,确认各部位螺丝已锁紧。

•调整正飞停悬点:螺距约在+5°。
若停悬时油门摇杆低于¾的位置:请降低油门或螺距曲线第3点的数值。
若停悬时油门摇杆高于¾的位置:请增加油门或螺距曲线第3点的数值。
若停悬时主旋翼转速过快:请降低油门曲线第3点的数值,并且增加螺距曲线第3点的数值。
若停悬时主旋翼转速过慢:请增加油门曲线第3点的数值,并且降低螺距曲线第3点的数值。

•调整最高点:螺距约在+9°。
先保持正飞停悬的状况,然后把油门摇杆推到最高点。
若机体上升快速但主旋翼转速变慢:高速螺距过大,请降低螺距曲线H点的数值。
若机体上升缓慢且主旋翼转速变快:高速螺距过小,请增加螺距曲线H点的数值。
调整至机体上升速度适中,且主旋翼转速变化不大即可。

•调整倒飞停悬点:螺距约在-5°。
若停悬时油门摇杆低于¼的位置:请增加油门曲线或降低螺距曲线第1点的数值。
若停悬时油门摇杆高于¼的位置:请降低油门曲线或增加螺距曲线第1点的数值。
若停悬时主旋翼转速过快:请降低油门曲线及螺距曲线第1点的数值。
若停悬时主旋翼转速过慢:请增加油门曲线及螺距曲线第1点的数值。

•调整最低点:螺距约在-9°。
先保持倒飞停悬的状况,然后把油门摇杆拉到最低点。
若机体上升快速但主旋翼转速变慢:负速螺距过大,请增加螺距曲线L点的数值。
若机体上升缓慢且主旋翼转速变快:负速螺距过小,请降低螺距曲线L点的数值。
调整至机体上升速度适中,且主旋翼转速变化不大即可。

油门锁定

油门锁定是为了执行熄火降落的动作,所以没有油门曲线只有螺距曲线。

1.调整最低点:螺距约在-4°。
先保持上空飞行的状态,把油门摇杆拉到最低点,随即将油门锁定开关切到ON的位置。
若机体下降速度过快:负速螺距过大,请增加螺距曲线L点的数值。
若机体下降速度缓慢:负速螺距过小,请降低螺距曲线L点的数值。
调整至机体下降速度适中,且主旋翼转速不会急遽减慢即可。

2.调整中立点:螺距约在+5°。
当机体降至离地3米高左右,把油门摇杆由最低点稳定地推向中立点。
若机体下降速度过快:中速速螺距过小,请增加螺距曲线第2点的数值。
若机体急速停止下降:中速速螺距过大,请降低螺距曲线第2点的数值。
调整至机体能缓慢且持续的下降即可。

3.调整最高点:螺距约在+12°。
最高点其实应该用不到,正常的熄火降落动作,在油门摇杆推至¾位置前,已经安全降落了。

目前,最常用的三种动态网页语言有ASP(Active Server Pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor)。

简 介

  ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Java script)作为自己的开发语言。

  PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。还有一点,PHP是完全免费的,不用花钱,你可以从 PHP官方站点(http: //www.PHP.net)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。

  JSP是Sun公司推出的新一代网站开发语言,Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和Java Applet之外,又有新的硕果,就是JSP,Java Server Page。JSP可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。

  三者都提供在 HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成 Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。在ASP 、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的 HTML页面只依赖于Web服务器,而ASP 、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。ASP 、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。

技术特点:
ASP:
1. 使用VBScript 、 JScript等简单易懂的脚本语言,结合HTML代码,即可快速地完成网站的应用程序。
2. 无须compile编译,容易编写,可在服务器端直接执行。
3. 使用普通的文本编辑器,如Windows的记事本,即可进行编辑设计。
4. 与浏览器无关(Browser Independence), 客户端只要使用可执行HTML码的浏览器,即可浏览Active Server Pages所设计的网页内容。Active ServerPages 所使用的脚本语言(VBScript 、 Jscript)均在WEB服务器端执行,客户端的浏览器不需要能够执行这些脚本语言。
5.Active Server Pages能与任何ActiveX scripting语言兼容。除了可使用VB Script或JScript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其它脚本语言,譬如REXX 、Perl 、Tcl等。脚本引擎是处理脚本程序的COM(Component Object Model) 对象。
6. 可使用服务器端的脚本来产生客户端的脚本。
7. ActiveX Server Components(ActiveX 服务器组件 )具有无限可扩充性。可以使用Visual Basic 、Java 、Visual C++ 、COBOL等程序设计语言来编写你所需要的ActiveX Server Component 。

PHP:
1 数据库连接
PHP 可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的群组合。你还可以自己编写外围的函数去间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松地修改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。但PHP提供的数据库接口支持彼此不统一,比如对Oracle, MySQL,Sybase的接口,彼此都不一样。这也是PHP的一个弱点。

JSP:
1.将内容的产生和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来产生页面上的动态内容。产生内容的逻辑被封装在标识和JavaBeans群组件中,并且捆绑在小脚本中,所有的脚本在服务器端执行。如果核心逻辑被封装在标识和Beans中,那么其它人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的产生。在服务器端,JSP引擎解释JSP标识,产生所请求的内容(例如,通过存取JavaBeans群组件,使用JDBC技术存取数据库),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。

2.强调可重用的群组件
绝大多数JSP页面依赖于可重用且跨平台的组件(如:JavaBeans或者Enterprise JavaBeans)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者用户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种群组织在他们现有的技能和优化结果的开发努力中得到平衡。

3.采用标识简化页面开发
Web 页面开发人员不会都是熟悉脚本语言的程序设计人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容产生所需要的。标准的JSP标识能够存取和实例化 JavaBeans组件,设定或者检索群组件属性,下载Applet,以及执行用其它方法更难于编码和耗时的功能。通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其它人员可以为常用功能建立自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。 JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及 Java 2EE的一个成员,JSP技术能够支持高度复杂的基于Web的应用。由于JSP页面的内置脚本语言是基于Java程序设计语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java程序设计语言“一次编写,各处执行”的特点。随着越来越多的供货商将JSP支持加入到他们的产品中,您可以使用自己所选择的服务器和工具,修改工具或服务器并不影响目前的应用。

应用范围:
ASP是Microsoft开发的动态网页语言,也继承了微软产品的一贯传统,只能执行于微软的服务器产品,IIS(Internet Information Server) (windows NT)和PWS(Personal Web Server)(windows 98)上。Unix下也有ChiliSoft的组件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的群组合来扩充,Unix下的COM 实现起来非常困难。

PHP3可在Windows,Unix,Linux的Web服务器上正常执行,还支持IIS,Apache等一般的Web服务器,用户更换平台时,无需变换PHP3代码,可即拿即用。

JSP 同PHP3类似,几乎可以执行于所有平台。如Win NT,Linux,Unix。在NT下IIS通过一个外加服务器,例如JRUN或者ServletExec,就能支持JSP。知名的Web服务器 Apache已经能够支持JSP。由于Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的执行平台。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的Linux更是来势不小。从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的与平台无关的。

性能比较:
有人做过试验,对这三种语言分别做回圈性能测试及存取Oracle数据库测试。在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而ASP、PHP测试的是 2000*2000循环(少一个数量级),却分别用了63秒和84秒。(参考PHPLIB)。 数据库测试中,三者分别对 oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒,ASP则 需要 73 秒。

前景分析:
  目前在国内PHP与ASP应用最为广泛。而JSP由于是一种较新的技术,国内采用的较少。但在国外, JSP已经是比较流行的一种技术,尤其是电子商务类的网站,多采用JSP。采用PHP的网站如新浪网(sina)、中国人(Chinaren)等,但由于 PHP本身存在的一些缺点,使得它不适合应用于大型电子商务站点,而更适合一些小型的商业站点。首先,PHP缺乏规模支持。其次,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。数据库、应用逻辑层、表示逻辑层彼此分开,而且同层也可以根据流量分开,群组成二维数组。而PHP则缺乏这种支持。还有上面提到过的一点,PHP提供的数据库接口支持不统一,这就使得它不适合运用在电子商务中。

ASP和JSP则没有以上缺陷, ASP可以通过Microsoft Windowsd的COM/DCOM获得ActiveX规模支持,通过DCOM和Transcation Server获得结构支持;JSP可以通过SUN Java的Java Class和EJB获得规模支持,通过EJB/CORBA以及众多厂商的Application Server获得结构支持。三者中,JSP应该是未来发展的趋势。世界上一些大的电子商务解决方案提供商都采用JSP/Servlet。比较出名的如 IBM的E-business,它的核心是采用JSP/Servlet的Web Sphere。它们都是通过CGI来提供支持的。但去年10月后它推出了Enfinity,一个采用JSP/Servlet的电子商务 Application Server,而且声言不再开发传统软件。

总之,ASP,PHP,JSP三者都有相当数量的支持者,由此也可以看出三者各有所长。正在学习或使用动态页面的朋友可根据三者的特点选择一种适合自己的语言。

本文转载自『异次元の世界』http://www.x-force.cn/article.asp?id=106

1. 打开新的窗口并传送参数:
传送参数:
response.write("<script>window.open(‘*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+…+"‘)</script>")

接收参数:
string a = Request.QueryString("id");
string b = Request.QueryString("id1");

2.为按钮添加对话框

传送参数:
response.write("<script>window.open(‘*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+…+"‘)</script>")

接收参数:
string a = Request.QueryString("id");
string b = Request.QueryString("id1");

2.为按钮添加对话框

Button1.Attributes.Add("onclick","return confirm(‘确认?‘)");

button.attributes.add("onclick","if(confirm(‘are you sure…?‘)){return true;}else{return false;}")

3.删除表格选定记录

int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];
string deleteCmd = "DELETE from Employee where emp_id = " + intEmpID.ToString()

4.删除表格记录警告
private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e)
{
switch(e.Item.ItemType)
{
case ListItemType.Item :
case ListItemType.AlternatingItem :
case ListItemType.EditItem:
TableCell myTableCell;
myTableCell = e.Item.Cells[14];
LinkButton myDeleteButton ;
myDeleteButton = (LinkButton)myTableCell.Controls[0];
myDeleteButton.Attributes.Add("onclick","return confirm(‘您是否确定要删除这条信息‘);");
break;
default:
break;
}

}

5.点击表格行链接另一页

private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//点击表格打开
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
e.Item.Attributes.Add("onclick","window.open(‘Default.aspx?id=" + e.Item.Cells[0].Text + "‘);");
}

双击表格连接到另一页
在itemDataBind事件中
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string OrderItemID =e.item.cells[1].Text;

e.item.Attributes.Add("ondblclick", "location.href=‘../ShippedGrid.aspx?id=" + OrderItemID + "‘");
}
双击表格打开新一页
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string OrderItemID =e.item.cells[1].Text;

e.item.Attributes.Add("ondblclick", "open(‘../ShippedGrid.aspx?id=" + OrderItemID + "‘)");
}
★特别注意:【?id=】 处不能为 【?id =】

6.表格超连接列传递参数
<asp:HyperLinkColumn Target="_blank" headertext="ID号" DataTextField="id" NavigateUrl="aaa.aspx?id=‘<%# DataBinder.Eval(Container.DataItem, "数据字段1")%>‘ & name=‘<%# DataBinder.Eval(Container.DataItem, "数据字段2")%>‘ />

7.表格点击改变颜色
if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onclick","this.style.backgroundColor=‘#99cc00‘;this.style.color=‘buttontext‘;this.style.cursor=‘default‘;");
}

写在DataGrid的_ItemDataBound里
if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","this.style.backgroundColor=‘#99cc00‘;this.style.color=‘buttontext‘;this.style.cursor=‘default‘;");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=‘‘;this.style.color=‘‘;");
}

8.关于日期格式

日期格式设定
DataFormatString="{0:yyyy-MM-dd}"

我觉得应该在itembound事件中
e.items.cell["你的列"].text=DateTime.Parse(e.items.cell["你的列"].text.ToString("yyyy-MM-dd"))

9.获取错误信息并到指定页面
不要使用Response.Redirect,而应该使用Server.Transfer
e.g
// in global.asax
protected void Application_Error(Object sender, EventArgs e) {
if (Server.GetLastError() is HttpUnhandledException)
Server.Transfer("MyErrorPage.aspx");

//其余的非HttpUnhandledException异常交给ASP.NET自己处理就okay了 🙂
}

Redirect会导致post-back的产生从而丢失了错误信息,所以页面导向应该直接在服务器端执行,这样就可以在错误处理页面得到出错信息并进行相应的处理

10.清空Cookie
Cookie.Expires=[DateTime];
Response.Cookies("UserName").Expires = 0

11.自定义异常处理

//自定义异常处理类
using System;
using System.Diagnostics;

namespace MyAppException
{
/// <summary>
/// 从系统异常类ApplicationException继承的应用程序异常处理类。
/// 自动将异常内容记录到Windows NT/2000的应用程序日志
/// </summary>
public class AppException:System.ApplicationException
{
public AppException()
{
if (ApplicationConfiguration.EventLogEnabled)
LogEvent("出现一个未知错误。");
}

public AppException(string message)
{
LogEvent(message);
}

public AppException(string message,Exception innerException)
{
LogEvent(message);
if (innerException != null)
{
LogEvent(innerException.Message);
}
}

//日志记录类
using System;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;

namespace MyEventLog
{
/// <summary>
/// 事件日志记录类,提供事件日志记录支持
/// <remarks>
/// 定义了4个日志记录方法 (error, warning, info, trace)
/// </remarks>
/// </summary>
public class ApplicationLog
{
/// <summary>
/// 将错误信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteError(String message)
{

WriteLog(TraceLevel.Error, message);
}

/// <summary>
/// 将警告信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteWarning(String message)
{

WriteLog(TraceLevel.Warning, message);
}

/// <summary>
/// 将提示信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteInfo(String message)
{
WriteLog(TraceLevel.Info, message);
}
/// <summary>
/// 将跟踪信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteTrace(String message)
{

WriteLog(TraceLevel.Verbose, message);
}

/// <summary>
/// 格式化记录到事件日志的文本信息格式
/// <param name="ex">需要格式化的异常对象</param>
/// <param name="catchInfo">异常信息标题字符串.</param>
/// <retvalue>
/// <para>格式后的异常信息字符串,包括异常内容和跟踪堆栈.</para>
/// </retvalue>
/// </summary>
public static String FormatException(Exception ex, String catchInfo)
{
StringBuilder strBuilder = new StringBuilder();
if (catchInfo != String.Empty)
{
strBuilder.Append(catchInfo).Append("");
}
strBuilder.Append(ex.Message).Append("").Append(ex.StackTrace);
return strBuilder.ToString();
}

/// <summary>
/// 实际事件日志写入方法
/// <param name="level">要记录信息的级别(error,warning,info,trace).</param>
/// <param name="messageText">要记录的文本.</param>
/// </summary>
private static void WriteLog(TraceLevel level, String messageText)
{

try
{
EventLogEntryType LogEntryType;
switch (level)
{
case TraceLevel.Error:
LogEntryType = EventLogEntryType.Error;
break;
case TraceLevel.Warning:
LogEntryType = EventLogEntryType.Warning;
break;
case TraceLevel.Inf
LogEntryType = EventLogEntryType.Information;
break;
case TraceLevel.Verbose:
LogEntryType = EventLogEntryType.SuccessAudit;
break;
default:
LogEntryType = EventLogEntryType.SuccessAudit;
break;
}

EventLog eventLog = new EventLog("Application", ApplicationConfiguration.EventLogMachineName, ApplicationConfiguration.EventLogSourceName );
//写入事件日志
eventLog.WriteEntry(messageText, LogEntryType);

}
catch {} //忽略任何异常
}
} //class ApplicationLog
}

12.Panel 横向滚动,纵向自动扩展
<asp:panel style="overflow-x:scroll;overflow-y:auto;"></asp:panel>

13.回车转换成Tab
<script language="javascript" for="document" event="onkeydown">
if(event.keyCode==13 && event.srcElement.type!=‘button‘ && event.srcElement.type!=‘submit‘ && event.srcElement.type!=‘reset‘ && event.srcElement.type!=‘‘&& event.srcElement.type!=‘textarea‘);
event.keyCode=9;
</script>

onkeydown="if(event.keyCode==13) event.keyCode=9"

http://dotnet.aspx.cc/exam/enter2tab.aspx

14.DataGrid超级连接列
DataNavigateUrlField="字段名" DataNavigateUrlFormatString="http://xx/inc/delete.aspx?ID={0}"

15.DataGrid行随鼠标变色
private void DGzf_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType!=ListItemType.Header)
{
e.Item.Attributes.Add( "onmouseout","this.style.backgroundColor=""+e.Item.Style["BACKGROUND-COLOR"]+""");
e.Item.Attributes.Add( "onmouseover","this.style.backgroundColor=""+ "#EFF3F7"+""");
}

}

16.模板列
<ASP:TEMPLATECOLUMN visible="False" sortexpression="demo" headertext="ID">
<ITEMTEMPLATE>
<ASP:LABEL text=‘<%# DataBinder.Eval(Container.DataItem, "ArticleID")%>‘ runat="server" width="80%" id="lblColumn" />
</ITEMTEMPLATE>
</ASP:TEMPLATECOLUMN>

<ASP:TEMPLATECOLUMN headertext="选中">
<HEADERSTYLE wrap="False" horizontalalign="Center"></HEADERSTYLE>
<ITEMTEMPLATE>
<ASP:CHECKBOX id="chkExport" runat="server" />
</ITEMTEMPLATE>
<EDITITEMTEMPLATE>
<ASP:CHECKBOX id="chkExportON" runat="server" enabled="true" />
</EDITITEMTEMPLATE>
</ASP:TEMPLATECOLUMN>

后台代码

protected void CheckAll_CheckedChanged(object sender, System.EventArgs e)
{
//改变列的选定,实现全选或全不选。
CheckBox chkExport ;
if( CheckAll.Checked)
{
foreach(DataGridItem oDataGridItem in MyDataGrid.Items)
{
chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");
chkExport.Checked = true;
}
}
else
{
foreach(DataGridItem oDataGridItem in MyDataGrid.Items)
{
chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");
chkExport.Checked = false;
}
}
}

17.数字格式化
【<%#Container.DataItem("price")%>的结果是500.0000,怎样格式化为500.00?】

<%#Container.DataItem("price","{0:¥#,##0.00}")%>

int i=123456;
string s=i.ToString("###,###.00");

18.日期格式化

【aspx页面内:<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date")%>
显示为: 2004-8-11 19:44:28
我只想要:2004-8-11 】

<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>

应该如何改?

【格式化日期】
取出来,一般是object
((DateTime)objectFromDB).ToString("yyyy-MM-dd");

【日期的验证表达式】
A.以下正确的输入格式: [2004-2-29], [2004-02-29 10:29:39 pm], [2004/12/31]

^((d{2}(([02468][048])|([13579][26]))[-/s]?((((0?[13578])|(1[02]))[-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/s]?((0?[1-9])|([1-2][0-9])))))|(d{2}(([02468][1235679])|([13579][01345789]))[-/s]?((((0?[13578])|(1[02]))[-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(s(((0?[1-9])|(1[0-2])):([0-5][0-9])((s)|(:([0-5][0-9])s))([AM|PM|am|pm]{2,2})))?$

B.以下正确的输入格式:[0001-12-31], [9999 09 30], [2002/03/03]

^d{4}[-/s]?((((0[13578])|(1[02]))[-/s]?(([0-2][0-9])|(3[01])))|(((0[469])|(11))[-/s]?(([0-2][0-9])|(30)))|(02[-/s]?[0-2][0-9]))$

【大小写转换】

HttpUtility.HtmlEncode(string);
HttpUtility.HtmlDecode(string)

19.如何设定全局变量
Global.asax中

Application_Start()事件中

添加Application[属性名] = xxx;

就是你的全局变量

20.怎样作到HyperLinkColumn生成的连接后,点击连接,打开新窗口?

HyperLinkColumn有个属性Target,将器值设置成"_blank"即可.(Target="_blank")

【ASPNETMENU】点击菜单项弹出新窗口
在你的menuData.xml文件的菜单项中加入URLTarget="_blank"
如:
<?xml version="1.0" encoding="GB2312"?>
<MenuData ImagesBaseURL="images/">
<MenuGroup>
<MenuItem Label="内参信息" URL="Infomation.aspx" >
<MenuGroup ID="BBC">
<MenuItem Label="公告信息" URL="Infomation.aspx" URLTarget="_blank" LeftIcon="file.gif"/>
<MenuItem Label="编制信息简报" URL="NewInfo.aspx" LeftIcon="file.gif" />
……
最好将你的aspnetmenu升级到1.2版

21.委托讨论
http://community.csdn.net/Expert/topic/2651/2651579.xml?temp=.7183191
http://dev.csdn.net/develop/article/22/22951.shtm

22.读取DataGrid控件TextBox值

foreach(DataGrid dgi in yourDataGrid.Items)
{
TextBox tb = (TextBox)dgi.FindControl("yourTextBoxId");
tb.Text….
}

23.在DataGrid中有3个模板列包含Textbox分别为 DG_ShuLiang (数量) DG_DanJian(单价) DG_JinE(金额)分别在5.6.7列,要求在录入数量及单价的时候自动算出金额即:数量*单价=金额还要求录入时限制为 数值型.我如何用客户端脚本实现这个功能?

〖思归〗
<asp:TemplateColumn HeaderText="数量">
<ItemTemplate>
<asp:TextBox id="ShuLiang" runat=‘server‘ Text=‘<%# DataBinder.Eval(Container.DataItem,"DG_ShuLiang")%>‘
onkeyup="javascript:DoCal()"
/>

<asp:RegularExpressionValidator id="revS" runat="server" ControlToValidate="ShuLiang" ErrorMessage="must be integer" ValidationExpression="^d+$" />
</ItemTemplate>
</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="单价">
<ItemTemplate>
<asp:TextBox id="DanJian" runat=‘server‘ Text=‘<%# DataBinder.Eval(Container.DataItem,"DG_DanJian")%>‘
onkeyup="javascript:DoCal()"
/>

<asp:RegularExpressionValidator id="revS2" runat="server" ControlToValidate="DanJian" ErrorMessage="must be numeric" ValidationExpression="^d+(.d*)?$" />

</ItemTemplate>
</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="金额">
<ItemTemplate>
<asp:TextBox id="JinE" runat=‘server‘ Text=‘<%# DataBinder.Eval(Container.DataItem,"DG_JinE")%>‘ />
</ItemTemplate>
</asp:TemplateColumn>

<script language="javascript">
function DoCal()
{
var e = event.srcElement;
var row = e.parentNode.parentNode;
var txts = row.all.tags("INPUT");
if (!txts.length || txts.length < 3)
return;

var q = txts[txts.length-3].value;
var p = txts[txts.length-2].value;

if (isNaN(q) || isNaN(p))
return;

q = parseInt(q);
p = parseFloat(p);

txts[txts.length-1].value = (q * p).toFixed(2);
}
</script>

24.datagrid选定比较底下的行时,为什么总是刷新一下,然后就滚动到了最上面,刚才选定的行因屏幕的关系就看不到了
page_load
page.smartNavigation=true

25.在Datagrid中修改数据,当点击编辑键时,数据出现在文本框中,怎么控制文本框的大小 ?

private void DataGrid1_ItemDataBound(obj sender,DataGridItemEventArgs e)
{
for(int i=0;i<e.Item.Cells.Count-1;i++)
if(e.Item.ItemType==ListItemType.EditType)
{
e.Item.Cells[i].Attributes.Add("Width", "80px")

}
}

26.对话框
private static string ScriptBegin = "<script language="JavaScript">";
private static string ScriptEnd = "</script>";

public static void ConfirmMessageBox(string PageTarget,string Content)
{

string ConfirmContent="var retValue=window.confirm(‘"+Content+"‘);"+"if(retValue){window.location=‘"+PageTarget+"‘;}";

ConfirmContent=ScriptBegin + ConfirmContent + ScriptEnd;

Page ParameterPage = (Page)System.Web.HttpContext.Current.Handler;
ParameterPage.RegisterStartupScript("confirm",ConfirmContent);
//Response.Write(strScript);

}

----------------------------------------

27. 将时间格式化:string aa=DateTime.Now.ToString("yyyy年MM月dd日");

1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;

1.2 取当前年
int 年= DateTime.Now.Year;

1.3 取当前月
int 月= DateTime.Now.Month;

1.4 取当前日
int 日= DateTime.Now.Day;

1.5 取当前时
int 时= DateTime.Now.Hour;

1.6 取当前分
int 分= DateTime.Now.Minute;

1.7 取当前秒
int 秒= DateTime.Now.Second;

1.8 取当前毫秒
int 毫秒= DateTime.Now.Millisecond;

28.自定义分页代码:

先定义变量 :public static int pageCount; //总页面数

public static int curPageIndex=1; //当前页面

下一页:

if(DataGrid1.CurrentPageIndex < (DataGrid1.PageCount – 1))

{

DataGrid1.CurrentPageIndex += 1;

curPageIndex+=1;

}

bind(); // DataGrid1数据绑定函数

上一页:

if(DataGrid1.CurrentPageIndex >0)

{

DataGrid1.CurrentPageIndex += 1;

curPageIndex-=1;

}

bind(); // DataGrid1数据绑定函数

直接页面跳转:

int a=int.Parse(JumpPage.Value.Trim());//JumpPage.Value.Trim()为跳转值

if(a<DataGrid1.PageCount)

{

this.DataGrid1.CurrentPageIndex=a;

}

bind();

29.DataGrid使用:

3.1添加删除确认:

private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

{

foreach(DataGridItem di in this.DataGrid1.Items)

{

if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.AlternatingItem)

{

((LinkButton)di.Cells[8].Controls[0]).Attributes.Add("onclick","return confirm(‘确认删除此项吗?‘);");

}

}

}

3.2样式交替:

ListItemType itemType = e.Item.ItemType;

if (itemType == ListItemType.Item )

{

e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor=‘#FFFFFF‘;";

e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor=‘#d9ece1‘;cursor=‘hand‘;" ;

}

else if( itemType == ListItemType.AlternatingItem)

{

e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor=‘#a0d7c4‘;";

e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor=‘#d9ece1‘;cursor=‘hand‘;" ;

}

3.3添加一个编号列:

DataTable dt= c.ExecuteRtnTableForAccess(sqltxt); //执行sql返回的DataTable

DataColumn dc=dt.Columns.Add("number",System.Type.GetType("System.String"));

for(int i=0;i<dt.Rows.Count;i++)

{

dt.Rows[i]["number"]=(i+1).ToString();

}

DataGrid1.DataSource=dt;

DataGrid1.DataBind();

3.4 DataGrid1中添加一个CheckBox,页面中添加一个全选框

private void CheckBox2_CheckedChanged(object sender, System.EventArgs e)

{

foreach(DataGridItem thisitem in DataGrid1.Items)

{

((CheckBox)thisitem.Cells[0].Controls[1]).Checked=CheckBox2.Checked;

}

}

将当前页面中DataGrid1显示的数据全部删除

foreach(DataGridItem thisitem in DataGrid1.Items)

{

if(((CheckBox)thisitem.Cells[0].Controls[1]).Checked)

{

string strloginid= DataGrid1.DataKeys[thisitem.ItemIndex].ToString();

Del (strloginid); //删除函数

}

}

30.当文件在不同目录下,需要获取数据库连接字符串(如果连接字符串放在Web.config,然后在Global.asax中初始化)

在Application_Start中添加以下代码:

Application["ConnStr"]=this.Context.Request.PhysicalApplicationPath+ConfigurationSettings.AppSettings["ConnStr"].ToString();

31. 变量.ToString()
字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%

32、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2);

34.在自己的网站上登陆其他网站:(如果你的页面是通过嵌套方式的话,因为一个页面只能有一个FORM,这时可以导向另外一个页面再提交登陆信息)

<SCRIPT language="javascript">
<!–
 function gook(pws)
 {
  frm.submit();
 }
//–>

</SCRIPT> <body leftMargin="0" topMargin="0" onload="javascript:gook()" marginwidth="0" marginheight="0">
<form name="frm" action=" http://220.194.55.68:6080/login.php?retid=7259 " method="post">
<tr>
<td>
<input id="f_user" type="hidden" size="1" name="f_user" runat="server">
<input id="f_domain" type="hidden" size="1" name="f_domain" runat="server">
<input class="box" id="f_pass" type="hidden" size="1" name="pwshow" runat="server">

<INPUT id="lng" type="hidden" maxLength="20" size="1" value="5" name="lng">
<INPUT id="tem" type="hidden" size="1" value="2" name="tem">

</td>

</tr>

</form>

文本框的名称必须是你要登陆的网页上的名称,如果源码不行可以用vsniffer 看看。
  下面是获取用户输入的登陆信息的代码:

string name;
name=Request.QueryString["EmailName"];

try
{
 int a=name.IndexOf("@",0,name.Length);
 f_user.Value=name.Substring(0,a);
 f_domain.Value=name.Substring(a+1,name.Length-(a+1));
 f_pass.Value=Request.QueryString["Psw"];
}

catch
{
 Script.Alert("错误的邮箱!");
 Server.Transfer("index.aspx");
}

35.警告窗口

/**//// <summary>
/// 服务器端弹出alert对话框
/// </summary>
/// <param name="str_Message">提示信息,例子:"不能为空!"</param>
/// <param name="page">Page类</param>
public void Alert(string str_Message,Page page)
{
page.RegisterStartupScript("","<script>alert(‘"+str_Message+"‘);</script>");
}

36.重载此警告窗口,使某控件获得焦点

/**//// <summary>
/// 服务器端弹出alert对话框,并使控件获得焦点
/// </summary>
/// <param name="str_Ctl_Name">获得焦点控件Id值,比如:txt_Name</param>
/// <param name="str_Message">提示信息,例子:"请输入您姓名!"</param>
/// <param name="page">Page类</param>
public void Alert(string str_Ctl_Name,string str_Message,Page page)
{
page.RegisterStartupScript("","<script>alert(‘"+str_Message+"‘);document.forms(0)."+str_Ctl_Name+".focus(); document.forms(0)."+str_Ctl_Name+".select();</script>");
}

37.确认对话框

/**//// <summary>
/// 服务器端弹出confirm对话框
/// </summary>
/// <param name="str_Message">提示信息,例子:"您是否确认删除!"</param>
/// <param name="btn">隐藏Botton按钮Id值,比如:btn_Flow</param>
/// <param name="page">Page类</param>
public void Confirm(string str_Message,string btn,Page page)
{
page.RegisterStartupScript("","<script> if (confirm(‘"+str_Message+"‘)==true){document.forms(0)."+btn+".click();}</script>");
}

38.重载确认对话框,点击确定触发一个隐藏按钮事件,点击取消触发一个隐藏按钮事件

/**//// <summary>
/// 服务器端弹出confirm对话框,询问用户准备转向那些操作,包括“确定”和“取消”时的操作
/// </summary>
/// <param name="str_Message">提示信息,比如:"成功增加数据,单击"确定"按钮填写流程,单击"取消"修改数据"</param>
/// <param name="btn_Redirect_Flow">"确定"按钮id值</param>
/// <param name="btn_Redirect_Self">"取消"按钮id值</param>
/// <param name="page">Page类</param>
public void Confirm(string str_Message,string btn_Redirect_Flow,string btn_Redirect_Self,Page page)
{
page.RegisterStartupScript("","<script> if (confirm(‘"+str_Message+"‘)==true){document.forms(0)."+btn_Redirect_Flow+".click();}else{document.forms(0)."+btn_Redirect_Self+".click();}</script>");
}

39.获得焦点

/**//// <summary>
/// 使控件获得焦点
/// </summary>
/// <param name="str_Ctl_Name">获得焦点控件Id值,比如:txt_Name</param>
/// <param name="page">Page类</param>
public void GetFocus(string str_Ctl_Name,Page page)
{
page.RegisterStartupScript("","<script>document.forms(0)."+str_Ctl_Name+".focus(); document.forms(0)."+str_Ctl_Name+".select();</script>");
}

40.子窗体返回主窗体

/**////<summary>
///名称:redirect
///功能:子窗体返回主窗体
///参数:url
///返回值:空
///</summary>
public void redirect(string url,Page page)
{
if ( Session["IfDefault"]!=(object)"Default")
{
page.RegisterStartupScript("","<script>window.top.document.location.href=‘"+url+"‘;</script>");
}
}

41.判断是否为数字

/**//// <summary>
/// 名称:IsNumberic
/// 功能:判断输入的是否是数字
/// 参数:string oText:源文本
/// 返回值: bool true:是 false:否
/// </summary>

public bool IsNumberic(string oText)
{
try
{
int var1=Convert.ToInt32 (oText);
return true;
}
catch
{
return false;
}
}

获得字符串实际长度(包括中文字符)

//获得字符串oString的实际长度
public int StringLength(string oString)
{
byte[] strArray=System.Text .Encoding.Default .GetBytes (oString);
int res=strArray.Length ;
return res;
}

42.将回车转换为TAB

//当在有keydown事件的控件上敲回车时,变为tab
public void Tab(System.Web .UI.WebControls .WebControl webcontrol)
{
webcontrol.Attributes .Add ("onkeydown", "if(event.keyCode==13) event.keyCode=9");
}

43.datagrid分页中如果删除时出现超出索引

public void jumppage(System.Web.UI.WebControls.DataGrid dg)
{
int int_PageLess; //定义页面跳转的页数
//如果当前页是最后一页
if(dg.CurrentPageIndex == dg.PageCount-1)
{
//如果就只有一页
if(dg.CurrentPageIndex == 0)
{
//删除后页面停在当前页
dg.CurrentPageIndex = dg.PageCount-1;
}
else
{
//如果最后一页只有一条记录
if((dg.Items.Count % dg.PageSize == 1) || dg.PageSize == 1)
{
//把最后一页最后一条记录删除后,页面应跳转到前一页
int_PageLess = 2;
}
else //如果最后一页的记录数大于1,那么在最后一页删除记录后仍然停在当前页
{
int_PageLess = 1;
}
dg.CurrentPageIndex = dg.PageCount – int_PageLess;
}
}
}

  有时候想为我们的网页提供多语言支持,如果一种语言用一张网页来做实在太麻烦了,幸好Google提供了语言工具功能,下面介绍如何利用它来实现网页多种语言之间的转换。

lan.htm

<form>
<select name="lan">
<option value="en|de">英语 翻译成 德语</option>
<option value="en|es">英语 翻译成 西班牙语</option>
<option value="en|fr">英语 翻译成 法语</option>
<option value="en|it">英语 翻译成 意大利语</option>
<option value="en|pt">英语 翻译成 葡萄牙语</option>
<option value="en|ja">英语 翻译成 日语 BETA</option>
<option value="en|ko">英语 翻译成 朝鲜语 BETA</option>
<option value="en|zh-CN" >英语 翻译成 中文(简体) BETA</option>
<option value="de|en">德语 翻译成 英语</option>
<option value="de|fr">德语 翻译成 法语</option>
<option value="es|en">西班牙语 翻译成 英语</option>
<option value="fr|en">法语 翻译成 英语</option>
<option value="fr|de">法语 翻译成 德语</option>
<option value="it|en">意大利语 翻译成 英语</option>
<option value="pt|en">葡萄牙语 翻译成 英语</option>
<option value="ja|en">日语 翻译成 英语 BETA</option>
<option value="ko|en">朝鲜语 翻译成 英语 BETA</option>
<option value="zh-CN|en">中文(简体) 翻译成 英语 BETA</option>
<input style="FONT-SIZE: 12px" type="button" value="Go->" name="Button1" onClick="javascript:window.open(‘translate.asp?urls=‘+document.location+‘&lan=‘+lan.value,‘_self‘,‘‘)">
</select>
</form>

  lan.htm中的内容用来选择要翻译的语言包括原来的语言和要翻译成的语言。我们只需要将lan.htm中的内容拷到提供多语言翻译的页面中就可以了。

translate.asp
<html>
<head>
<title>在线翻译</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<%
‘on error resume next
‘ 如果网速很慢的话,可以调整以下时间。单位秒
Server.ScriptTimeout = 999999
‘========================================================
‘字符编码函数
‘========================================================
Function BytesToBstr(body,code)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset =code
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function

‘取行字符串在另一字符串中的出现位置
Function Newstring(wstr,strng)
Newstring=Instr(lcase(wstr),lcase(strng))
if Newstring<=0 then Newstring=Len(wstr)
End Function
‘替换字符串函数
function ReplaceStr(ori,str1,str2)
ReplaceStr=replace(ori,str1,str2)
end function
‘=====================================================
function ReadXml(url,code,start,ends)
set oSend=createobject("Microsoft.XMLHTTP")
SourceCode = oSend.open ("GET",url,false)
oSend.send()
ReadXml=BytesToBstr(oSend.responseBody,code )
if(start="" or ends="") then
else
start=Newstring(ReadXml,start)
ReadXml=mid(ReadXml,start)
ends=Newstring(ReadXml,ends)
ReadXml=left(ReadXml,ends-1)
end if
end function
dim urlpage,lan
urlpage=request("urls")
lan=request("lan")
%>
<form method="post" action="translate.asp">
<input type="text" name="urls" size="150" value="<%=urlpage%>">
<input type="hidden" name="lan" value="<%=lan%>">
<input type="submit" value="submit">
</form>
<%
dim transURL
transURL="http://216.239.39.104/translate_c?hl=zh-CN&ie=UTF-8&oe=UTF-8&langpair="&server.URLEncode(lan)&"&u="&urlpage&"&prev=/language_tools"
if(len(urlpage)>3) then
getcont=ReadXml(transURL,"gb2312","","")
response.Write(getcont)
end if

%>
</body>
</html>

  translate.asp实现翻译功能,这是利用google的语言工具实现的。

  注意,因为提供多语言支持,所以translate.asp文件所用的编码是支持所有字符的"utf-8" 。

  第一招、屏幕保护

  在Windows中启用了屏幕保护之后,只要我们离开计算机(或者不操作计算机)的时间达到预设的时间,系统就会自动启动屏幕保护程序,而当用户移动鼠标或敲击键盘想返回正常工作状态时,系统就会打开一个密码确认框,只有输入正确的密码之后才能返回系统,不知道密码的用户将无法进入工作状态,从而保护了数据的安全。

  提示:部分设计不完善的屏幕保护程序没有屏蔽系统的“Ctrl+Alt+Del”的组合键,因此需要设置完成之后测试一下程序是否存在这个重大Bug。

  不过,屏幕保护最快只能在用户离开1分钟之后自动启动,难道我们必须坐在计算机旁等待N分钟看到屏幕保护激活之后才能再离开吗?其实我们只要打开Windows安装目录里面的system子目录,然后找到相应的屏幕保护程序(扩展名是SCR),按住鼠标右键将它们拖曳到桌面上,选择弹出菜单中的“在当前位置创建快捷方式”命令,在桌面上为这些屏幕保护程序建立一个快捷方式。

  此后,我们在离开计算机时双击这个快捷方式即可快速启动屏幕保护。

  第二招、巧妙隐藏硬盘

  在“按Web页”查看方式下,进入Windows目录时都会弹出一句警告信息,告诉你这是系统文件夹如果“修改该文件夹的内容可能导致程序运行不正常,要查看该文件夹的内容,请单击显示文件”,这时单击“显示文件”就可以进入该目录了。

  原因是在Windows根目录下有desktop.ini和folder.htt两个文件作祟。将这两个文件拷贝到某个驱动器的根目录下(由于这两个文件是隐藏文件,之前必须在文件夹选项中单击“查看”标签,选择“显示所有文件”,这样就可以看见这两个文件了)。再按“F5”键刷新一下,看看发生了什么,是不是和进入Windows目录时一样。

  接下来我们用“记事本”打开folder.htt,这是用HTML语言编写的一个文件,发挥你的想像力尽情地修改吧。

  如果你不懂HTML语言也没关系,先找到“显示文件”将其删除,找到“修改该文件夹的内可能导致程序运行不正常,要查看该文件夹的内容,请单击显示文件”,将其改为自己喜欢的文字,例如“安全重地,闲杂人等请速离开”。

  将“要查看该文件夹的内容,请单击”改为“否则,后果自负!”,接着向下拖动滑块到倒数第9行,找到“(file://%TEMPLATEDIR%wvlogo.gif)”这是显示警告信息时窗口右下角齿轮图片的路径,将其改为自己图片的路径,例如用“d: upian upian1.jpg”替换“//”后面的内容,记住这里必须将图片的后缀名打出,否则将显示不出图片。

  当然,你还可以用像Dreamweaver、FrontPage这样的网页工具做出更好的效果,然后只要将原文件拷贝到下面这段文字的后面,覆盖掉原文件中“~”之间的内容就可以了。

  *ThisfilewasautomaticallygeneratedbyMicrosoftInternetEXPlorer5.0

  *usingthefile%THISDIRPATH%folder.htt.

   保存并退出,按“F5”键刷新一下,是不是很有个性?接下来要作的就是用“超级兔子”将你所要的驱动器隐藏起来,不用重新启动就可以欣赏自己的作品了。最后告诉大家一招更绝的,就是干脆将folder.htt原文件中“~”之间的内容全部删除,这样就会给打开你的驱动器的人造成一种这是一个空驱动器的假象,使其中的文件更安全。

  第三招、禁用“开始”菜单命令

  在Windows2000/XP中都集成了组策略的功能,通过组策略可以设置各种软件、计算机和用户策略在某种方面增强系统的安全性。运行“开始→运行”命令,在“运行”对话框的“打开”栏中输入“gpedit.msc”,然后单击“确定”按钮即可启动WindowsXP组策略编辑器。

  在“本地计算机策略”中,逐级展开“用户配置→管理模板→任务栏和开始菜单”分支,在右侧窗口中提供了“任务栏”和“开始菜单”的有关策略。

  在禁用“开始”菜单命令的时候,在右侧窗口中,提供了删除“开始”菜单中的公用程序组、“我的文档”图标、“文档”菜单、“网上邻居”图标等策略。清理“开始”菜单的时候只要将不需要的菜单项所对应的策略启用即可,比如以删除“我的文档”图标为例,具体操作步骤为:

  1)在策略列表窗口中用鼠标双击“从开始菜单中删除我的文档图标”选项。

  2)在弹出窗口的“设置”标签中,选择“已启用”单选按钮,然后单击“确定”即可。

  第四招、桌面相关选项的禁用

  WindowsXP的桌面就像你的办公桌一样,有时需要进行整理和清洁。有了组策略编辑器之后,这项工作将变得易如反掌,只要在“本地计算机策略”中展开“用户配置→管理模板→桌面”分支,即可在右侧窗口中显示相应的策略选项。

  1)隐藏桌面的系统图标

  倘若隐藏桌面上的系统图标,传统的方法是通过采用修改注册表的方式来实现,这势必造成一定的风险性,采用组策略编辑器,即可方便快捷地达到此目的。

  若要隐藏桌面上的“网上邻居”和“InternetEXPlorer”图标,只要在右侧窗口中将“隐藏桌面上网上邻居图标”和“隐藏桌面上的InternetEXPlorer图标”两个策略选项启用即可。如果隐藏桌面上的所有图标,只要将“隐藏和禁用桌面上的所有项目”启用即可。

  当启用了“删除桌面上的我的文档图标”和“删除桌面上的我的电脑图标”两个选项以后,“我的电脑”和“我的文档”图标将从你的电脑桌面上消失了。如果在桌面上你不再喜欢“回收站”这个图标,那么也可以把它给删除,具体方法是将“从桌面删除回收站”策略项启用。

  2)禁止对桌面的某些更改

  如果你不希望别人随意改变计算机桌面的设置,请在右侧窗口中将“退出时不保存设置”这个策略选项启用。当你启用这个了设置以后,其他用户可以对桌面做某些更改,但有些更改,诸如图标和打开窗口的位置、任务栏的位置及大小在用户注销后都无法保存。

  第五招、禁止访问“控制面板”

  如果你不希望其他用户访问计算机的控制面板,你只要运行组策略编辑器,并在左侧窗口中展开“本地计算机策略→用户配置→管理模板→控制面板”分支,然后将右侧窗口的“禁止访问控制面板”策略启用即可。

  此项设置可以防止控制面板程序文件的启动,其结果是他人将无法启动控制面板或运行任何控制面板项目。另外,这个设置将从“开始”菜单中删除控制面板,同时这个设置还从Windows资源管理器中删除控制面板文件夹。

  提示:如果你想从上下文菜单的属性项目中选择一个“控制面板”项目,会出现一个消息,说明该设置防止这个操作。

  第六招、设置用户权限

  当多人共用一台计算机时,在WindowsXP中设置用户权限,可以按照以下步骤进行:

  1)运行组策略编辑器程序。

  2)在编辑器窗口的左侧窗口中逐级展开“计算机配置→Windows设置→安全设置→本地策略→用户权限指派”分支。

  3)双击需要改变的用户权限,单击“添加用户或组”按钮,然后双击想指派给权限的用户账号,最后单击“确定”按钮退出。

  第七招、文件夹设置审核

  WindowsXP可以使用审核跟踪用于访问文件或其他对象的用户账户、登录尝试、系统关闭或重新启动以及类似的事件,而审核文件和NTFS分区下的文件夹可以保证文件和文件夹的安全。为文件和文件夹设置审核的步骤如下:

  1)在组策略窗口中,逐级展开右侧窗口中的“计算机配置→Windows设置→安全设置→本地策略”分支,然后在该分支下选择“审核策略”选项。

  2)在右侧窗口中用鼠标双击“审核对象访问”选项。

  3)用鼠标右键单击想要审核的文件或文件夹,选择弹出菜单的“属性”命令,接着在弹出的窗口中选择“安全”标签。

  4)单击“高级”按钮,然后选择“审核”标签。

  5)根据具体情况选择你的操作:

  倘若对一个新组或用户设置审核,可以单击“添加”按钮,并且在“名称”框中键入新用户名,然后单击“确定”按钮打开“审核项目”对话框。

  要查看或更改原有的组或用户审核,可以选择用户名,然后单击“查看/编辑”按钮。

  要删除原有的组或用户审核,可以选择用户名,然后单击“删除”按钮即可。

  6)如有必要的话,在“审核项目”对话框中的“应用到”列表中选取你希望审核的地方。

  7)如果想禁止目录树中的文件和子文件夹继承这些审核项目,选择“仅对此容器内的对象和/或容器应用这些审核项”复选框。

  注意:必须是管理员组成员或在组策略中被授权有“管理审核和安全日志”权限的用户可以审核文件或文件夹。在WindowsXP审核文件、文件夹之前,你必须启用组策略中“审核策略”的“审核对象访问”。否则,当你设置完文件、文件夹审核时会返回一个错误消息,并且文件、文件夹都没有被审核。

美国ZIP Code 一览表

邮编   城市(city)     州(state)
12201  Albany       NewYork(NY)
30301  Atlanta       Georgia(GA)
21401  Annapolis      Maryland(MD)
21201  Baltimore      Maryland(MD)
35201  Birmingham     Alabama(AL)
14201  Buffalo       NewYork(NY)
60601  CHICAGO       Illinois(IL)
45201  Cincinnati     Ohio(OH)
44101  Cleveland      Ohio(OH)
43085  Columbus      Ohio(OH) 
71953  Dallas       Arkansas(AR)
80002  Denver       Colorado(CO)
99701  Fairbanks      Alaska(AK)
19019  Philidelphia    pennsylvania(PA)
96801  Honolulu      Hawii(HI)
46201  Indianapolis    Indiana(IN)
32099  Jacksonville    FLORIDA(FL)     
64101  Kansas City     Missouri(MO)
90001  Los Angeles     California(CA)
89101  Las Vegas      Navada(NV)
55199  Minneapolis     Minnesota(MN)
10001  New York      NewYork(NY)
70112  New orleaans    Louisana(LA)
68046  Omaha        Nebraska(NE)
85001  Phoenix       Arizona(AZ)
15122  Pittsburgh     pennsylvania(PA)
84101  Salt Lake City   Utah(UT)
94203  Sacramento     California(CA)
92101  San Diego      California(CA)
94101  San Francisco    California(CA)
95101  San Jose      California(CA)
55101  Saint Paul     Minnesota(MN)
63101  Saint Louis     Missouri(MO)
98101  Seattle       Washington(WA)
33601  Tampa        FLORIDA(FL)

 

清脂减肥胶囊400mg*60粒
差评 [详情] 骗人,我拍的是一瓶。他却发一颗,那有吃1颗就减肥的,顺属欺诈2007.04.03 19:50
解释:哦对不起,到昨天我才知道,我用的这个快递业务员是属耗子的!

夏天适用时尚提包
差评 [详情]卖家服务不好,虽然我知道你很忙,但每次也不必和我说话如此简单吧,不是恩,就是好,一个字一个字的说,太不尊重人了,所以给个差评。2007.01.10 18:22
解释:呸

精美欧洲进口巧克力
差评 [详情]巧克力晚了3天才到,而且到的时候都碎了,害我跟男友吵了一架2007.02.12 15:32
解释:打是亲,骂是爱,实在不行下脚踹。

中药 美颜纤体粥
差评 [详情] 完全没有效果!!!!! 2006.09.14 08:48
解释:完全没说实话!

考拉玩具树袋抱抱熊
差评 [详情] 邮寄单上名字写错了2006.11.01 02:42
解释:
晕,这样也给差评,那我就多写几遍好了。。李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,

马鞭草–瘦身,治疗头痛
差评 [详情] 为什么你的马鞭草和别人家的不一样?2007.02.02 14:21
解释:为什么你和别人长的不一样?

闹钟/床头钟/圆形饼干钟表
差评 [详情] 由于频频上当,好久都没有在网上购物了,这次还是忍不住,买了这块表,结果又上当了。你们究竟在干什么?2005.02.13 14:29
解释:马三立说了:“逗你玩!”

中式淑女唐装折扣特价
差评 [详情] 这么久了,还是不理我,只好给你个差评啦!!!2007.01.23 19:44
解释:冤哪,我生病住院了,刚刚从医院回来,看来又得住院去了。

野生榛子
差评 [详情] 榛子壳很硬,吃完这一斤,我的牙都快掉了,为了增加重量多收邮费,还往箱里塞一块破铁。2006.12.03 01:51
解释:
你细看那块铁,中间是否有个螺丝,再往下看,是不中间有条缝,沿着这个缝用力分开—这块破铁就是给你夹榛子壳用的特制钳子!

莱挺宝天然丰胸美
差评 [详情] 此广告与实际效果不相符,请大家擦亮眼睛。2006.09.13 00:02
解释:此评价与实际情况不相符,请大家擦亮眼睛。

草本配方-安全减肥
差评 [详情] 实际服用的情况与网上的描述根本不一样,也没有说明书上的效果,服用后心慌,厌食,睡不着,一点没作用 2007.03.22 14:205
解释:撒谎~~副作用和描述完全吻合!

物品名称: 韩国时尚最新款式性感MM上衣
差评:不错,我喜欢!
解释:难道你老公不喜欢吗?

物品名称:丰盛水果篮–12种水果
中评 [详情] 部分水果还是太熟了2006.05.10 14:49
解释:按你妈妈的要求发了熟一点的果果,收到后只能放3,5天的,放冰箱时间能长一点.(记住下次要你妈妈做评价。)

物品名称:益达口香糖
差评 [详情] 我要的是口香糖,但结果送来了一块象白乎乎的东西,甜死.无法吃.2006.04.04 16:56
解释:晕死,那是我送你的白巧克力啊, 口香糖包在下面报纸里面呀,不会扔垃圾桶了吧?快去找找

物品名称:玛姬儿纯棉压缩纸膜
中评*未使用支付宝成功交易 [详情] 没什么
解释:没什么是什么!!什么是没什么!!没什么给中评做什么!!什么什么人!!狂晕!!!

物品名称:欧诗漫—30g珍珠水嫩保湿眼霜
差评 [详情] 怎样退货?
解释:冤枉啊,拍下后,款都没有付,我都没发货,谈什么退货?

物品名称:带核话梅500克
中评 [详情] 怎莫脆梅变话梅了呢?和我要的完全不相符哦2006.03.19 20:19
解释:大概时间长干了吧,一样的,也好吃的。

物品名称:*耳饰*小鸟耳钉
中评 [详情] 好评点了怎么没反应,试试中评可以不。
解释:怎么可以这样啊,哎,你的电脑可以升极拉:( 非常非常郁闷

物品名称:水晶球
差:球球挺好,照片上的底坐为啥不给我?
解释:冤枉!那是我LG的烟灰缸。

中评 虽然还是失败了~~但是`还是谢谢你~~ [详情] –2004.08.29 20:45
解释:失败什么?是你拍下不买的哎~~真受不了

差评: 对不起我不换好评的. [详情] –2004.04.29 15:22
解释: 我什么时候和你换好评了。真是的!缺德!!

差评 : 汇款之前:热心+耐心+诚心,哄得我很开心;汇款之后:冷心+狠心+绝心,骗得我好伤心。购买的YY跟收到的YY完全不一样(款式和颜色)。换货不肯,退货不行,退款没门。几十元的信用都没有,这样的卖家,遇上一个就足够了。网上购物,还得长个心眼。不知道卖家会编造一个怎样的理由,自圆其说。[详情] –2004.09.10 22:04
解释:小姐你是不是发错了啊!!

中平:珍珠项链不错,戒指也挺好看,抱枕手感很好,手机挂件也不错,都挺喜欢的,就是卖家态度在好点就好了。
解释:您买的我店里一样也没有呀?我猜您一定是个很有钱的人,一下子买了这么多东西……

镀白金项链*9元~
中评 我女朋友的评价是“一般”
解释:你给她买个钻戒看看!

好评 态度不好,东西还行, [详情] –2004.12.03 13:31
解释:我什么时候对你态度不好了??????????莫名其妙 是不是要我说我爱你 觉得态度才好啊!?

中评:我没买
解释: 唉!

前言

 

      笔者在飞行过程中体会到:由于不知道到底配置才能符合3D飞行的需要,期间也花了不少冤枉钱,有鉴于此,笔者提供一些个人在选择直升机和其配置的经验给各位玩家参考,工欲善其事,必先利其器,选对了配件,相信一定能事半功倍,成为PRO级的3D玩家绝不是梦想。

 

遥控器与配置

 

      在遥控器方面笔者建议最好能选择八通道以上(含八通道),因为八通道以上的遥控器在油门曲线与螺距曲线调整功能方面较为完善,且都有多个混控功能,可用于动作(AILE,EVEL,RUDO)对油门(THRO)混控,或针对有僻性的直升机做混控来改善僻性在伺服器方面,由于3D飞行时动作剧烈,伺服器的负荷较重,因此笔者建议在50级以下直升机上最好使用扭力4公斤以上的伺服器,60级以上直升机则使用扭力5公斤以上的伺服器。伺服器有足够的扭力才能机体应有的性能,若使用扭力不足的伺服器勉强飞行,不但无法发挥直升机应有的性能,甚至可能导致伺服器的损坏而造成更多的损失。

 

      在尾舵伺服器方面比较需要的是速度,速度越快的伺服器越能有效的发挥陀螺仪的效果,当然尾舵伺服器的选择也不能仅考虑速度而已,扭力也不应完全忽视,笔者曾多次见过飞友使用扭力不足的尾舵伺服器在强风下试着做尾仪自旋的动作,不但无法将尾仪顺利自旋,甚至在多次尝试后当场把伺服器给损坏了,所以建议使用扭力3公斤以上的伺服器来控制尾舵会比较保险,尾舵伺服器的选择除了考虑其速度与扭力两项因素以外,更重要的是与陀螺仪是否能搭配,有些陀螺仪有指定使用专用的伺服器,如FUTABA和GY-601陀螺仪就必须搭配5291的伺服器,JR的G6000T陀螺仪就得搭配8700G伺服器等……

 

      在陀螺仪方面笔者强烈建议使用具有锁定功能的陀螺仪,因为3D飞行时经常需要做各种倒退,横滑的动作,为了能更精准且轻松的掌握尾陀,锁定式陀螺仪可说是3D飞行不可缺的配置。

 

主旋翼的选择

 

      由于3D飞行时经常使机体处于倒飞状态,所以主旋翼的翼型最好能采用全对称翼型,让倒飞时能拥有较好的升力,且倒飞时所需的螺距也较容易测量,不过在选择主旋翼时仍须注意,虽然市面上所贩售的主旋翼包装上都会注明翼型为全对称或准对称,但实际上仍有少部分标示翼型不符的情况,外包装标示为全对称但实际上却是半对称的主旋翼,选择时特别注意,至于材质方面的选择则是以碳纤维主旋翼较佳,因为碳纤维一般都比玻璃纤维或木制主旋翼要硬,在执行剧烈的3D动作时比较不易变形,动力较能发挥,笔者在飞行场中已看过多次因主旋翼硬度不够,在执行剧烈动作或转速不足的情况下打到尾管,甚至是在高转速的情况下主旋翼从翼跟位置裂开而射出,直升机就好像在空中爆炸似的解体,修复直升机的费用恐怕比一组碳纤维主旋翼贵多了,所以基于安全上考虑,笔者建议在做3D飞行时,尽量避免使用木制主旋翼,尤其是50级以上的机种,因为其大动力实在不是木制主旋翼所能承受的……安全第一嘛。虽然说碳纤维主旋翼是3D飞行时的最佳选择,但在选择时仍需注意,同样是碳纤维的主旋翼,不同厂牌或规格在硬度上仍有不小的差距,甚至有些号称碳纤维制的主旋翼却比玻璃纤维制的主旋翼还软,所以在购买时还是多做比较,避免买到名不符实的“      ”纤维主旋翼。 主旋翼夹头与固定螺丝直升机在3D飞行时的主旋翼转速几乎都在1800RPM以上,此时主旋翼夹头与主旋翼的固定螺丝承受的拉力是相当大的,若材质不够坚固在飞行中就有可能会发生断裂的情形,一旦夹头或固定螺丝断裂,那一台完的直升机就有可能再变回套件……目前大部份30级的直升机都使用直径4mm的固定螺丝,较不会有断裂的情形发生,不过仍有少部份的机种还是采用直径3mm的固定螺丝,笔者建议尽量避免使用它来做剧烈的3D飞行。 现在市面上大部分的50级直升机都是由30级改装而来的(改装齿轮比、尾管长度、主旋翼长度等),其主旋翼夹头并没有改装,虽然在30级上搭配长度550mm的主旋翼执行高转速的3D飞行没有问题,但在50级直升机上搭配600mm的主旋,主旋翼的重量加重且引擎马力也加大,主旋翼夹头就有可能因而断裂,笔者在飞行场中见过不少这种例子,原本是30级的直升机在操各种剧烈的动作都没发生问题,直接改装成50级后第一趟飞行就下课了,还没感受到大动力所带来的乐趣就先瘦了荷包,所以笔者建议各位玩家对于部份主旋翼夹头强度的机种,最好能更换为金属夹头,虽然价格上较为昂贵,但绝对比修理直升机来的便宜。

 

十字盘控制模式

 

      目前市面上较常见的十字盘除了传统的90度版以外,大概就是120度的CCPM版了,这两种十字盘控制模式在飞行特性有些许的不同,尤其是螺距的反应速度,CCPM版的螺距反应比传统版的反应要快,对于喜欢将直升机瞬间弹射出去的玩家是再适合不过的了,笔者个人也较喜好这种飞行特性,不过此种十字盘控制模式在组装上有较多的限制,如三个控制十字盘的伺服器必须是一样的规格、伺服器臂的长度、行程等都需一致,面传统十字盘模式就无此种限制了,所以在组装与设定上较为单纯,一般初学的玩家也较容易了解。

 

尾旋翼传动方式

 

      尾旋翼的传动方式一般可分为轴传动与皮带传动两种,两种传动方式各有其优缺点,皮带传动的优点是噪音小、维修方便且较便宜,便缺点是动力损耗较大,尤其在30级直升机上更为明显,至于轴传动的优点则是传动效率较佳,所以动力损耗较小,但由于多了一级齿轮,自然噪音就比较大,而摔机时由于传动轴受损的机率较皮带受损的机率高,因此维修成本也较高,这是轴传动的缺点。就笔者个人经验来说,在30级直升机上,由于引擎动力相当有限,皮带张力对它来说是一明显的负担,尤其是张力调的太紧的时候,动力损耗就会更明显,这对于需要大动力的3D飞行来说是一项不利的因素,因此对于这种动力较小的直升机,若仅就性能方面的考量,笔者个人较喜好尾旋翼采用轴传动的方式,因为其动力损耗较少,直升机会有较好的动力表现,且在熄火降落方面也会有帮助。不过对于50级以上的机种来说,皮带传动所能损耗掉的动力就不是那么明显了,因为50级以上的直升机拥有较充足的动力,皮带张力所损耗掉的动力对它而言相当有限,不至于影响到飞行性能,反倒显现出其低噪音与低维修成本的两个优点,一般而言,50级以上的直升机其维修成本较高,所以轴传动与皮带传动在维修方面的费用差距颇大,若仅就经济方面来考量,笔者个人觉得尾旋翼采用皮带传动的直升机飞起来会比较没有心理压力,尤其是在飞60级以上直升机时,这种感会更明显。

 

熄火降落装置

 

      目前市面上仍有部分直升机无熄火降落装置,笔者建议玩家们能将此装置加装上去,因为若能以精彩的熄火降落来作为整趟飞行动作的结束,那将使整趟飞行更完美。一般熄火降落装置可分为磨擦式与分离式齿盘两种,笔者个人不建议使用磨擦式的熄火降落装置,因为在引擎熄火后,若要再执行尾舵的动作,如尾舵自旋熄火降落、倒退熄火降落等动作时,往往会产生打滑的现象,造成尾旋翼转数不足而难以完成此类动作,因此建议使用分离式齿盘的熄火降落装置,这种装置的尾旋翼传动确实,虽然对主旋翼来说会产生较大的负荷,但唯有此种装置才能在引擎熄火后还能确实操控尾舵,完成许多难度较高的熄火降落动作。

 

      垂直及水平尾翼面积由于3D飞行中经常会有高速倒退、高速横向滑动、尾舵快速自旋等动作,这时垂直及水平尾翼的面积若是太大,反而会使得这些动作难以顺利完成,如水平尾翼面积太大会造成高速倒退时的直线航道较难掌控,而垂直尾翼面积太大则会造成机体在横向滑动或在执行尾舵动作时的尾舵负荷增加,因此若能适当的缩小垂直水平尾翼的面积,将更加有利于3D飞行,现在市面上有许多机种都有“中空”的垂直及水平尾翼设计,这样的设计较有利于3D飞行。

 

加速管

 

      就笔者个人经验而言,在原厂直升机套件中所附的排气管,对于引擎动力的提升效果实在有限,而且消音效果也不是很理想,要应会剧烈的3D飞行显得有点勉强,因此笔者认为选择一支适当的加速管是必要的,然而目前市面上的加速管种类繁多,效果不一,建议在选购时最好能多请教一些老经验的玩家,避免买到重看不重用的消音器,笔者个人较喜好两截式的加速管,因为这类的加速管在高速方面都有不错的表现,但在中低速的稳定性方面较不易调整,有时甚至得搭配适当长度的弯管才能发挥效果,调整上较为麻烦,虽然动力大但不见得适合每一个人。

 

螺距总行程

 

      由于直升机在3D飞行时所需的螺距总行量至少必须达到23度,因为在3D飞行模式中螺距行程为+10度到-10度,而熄火降落时最大螺距为+13度,所以说,一台要用来做3D飞行的直升机其主旋翼的总螺距最好能超过23度,如此才能应付3D飞行时所有的动作,因此玩家在选择直升机时一定得多注意这点,才不会去买到一台因为螺距不足而导致要做3D就不能做熄火降落、要做熄火降落就不能做3D的直升机,真可说是先天不足引发后天失调,买到这种直升机,技术要进步恐怕会有点……慢