月度存档: 八月 2007

ASP.NET常用代码四十三例

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;
}
}
}

ASP利用Google实现在线翻译功能

  有时候想为我们的网页提供多语言支持,如果一种语言用一张网页来做实在太麻烦了,幸好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" 。

黑客入侵XP常用的七种方法

  第一招、屏幕保护

  在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审核文件、文件夹之前,你必须启用组策略中“审核策略”的“审核对象访问”。否则,当你设置完文件、文件夹审核时会返回一个错误消息,并且文件、文件夹都没有被审核。

Prison Break S03 17mins Preview

越狱第三季好像已经开播了,但是目前只拿得到这个17分钟的Preview。

有兴趣的朋友可以用这个BT种子Down下来Preview一下先——

附件:prison_break_s03e01_17_minutes_preview.3783456.tpb.zip(19982 Byte)

美国ZIP Code 一览表

美国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飞行——机体的选择

前言

 

      笔者在飞行过程中体会到:由于不知道到底配置才能符合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的直升机,真可说是先天不足引发后天失调,买到这种直升机,技术要进步恐怕会有点……慢

聚合物锂电池终极使用指南

  锂电池最常用的有锂聚合物(Li-Poly)与锂离子(Li-ion) 这两种,与我们常用在模型上的镍镉(Ni-Cd)与镍氢(Ni-MH)电池有相当大的差异。

  一、充电/安全 重要!!!

  若你是飞行的新手,记住“不要”使用聚合物锂电池,没有任何例外,继续读下去就知道这么规定的原因了。

  至于其它重要的有:锂电池充电的方法与传统镍镉及镍氢电池有很大不同,要对锂电池充电必须使用专门为锂电设计的锂电专用充电器。

  一般而言如果锂电充电器可以正确计算掌握锂电池的组成Cell数(指的是一大条锂电是由几颗单颗小锂电组成的),则可以适应离子电池(Li-ion)和聚合物锂电池(Li-Poly)的充电需要。记住千万不要用只能充镍镉(Ni-Cd)与镍氢(Ni-MH)电池的充电器来对锂电充电,那非常的危险!

  对锂电池充电是使用锂电时最危险的一个部分,当在对锂电充电时请极端地注意锂电的充电情况。对锂电充电器设定正确的充电电压或正确的电池颗数是十分重要的,若没做好锂电充电器的设定,可能会造成锂电池的过充而产生爆炸与大火。已经有好几回火灾是由锂电池所引起的。请以负责任的态度进行锂电池的充电工作。 以下是一些锂电池在充电与使用上的指导原则:

  1.使用经过验证可安全使用的锂电专用充电器

  2.确定你已经正确的设定了锂电专用充电器上面的电压或是电池颗数的参数,如果你不知道如何进行设定,请去买一个你知道如何进行设定的锂电充电器,不然就是不要用锂电,以免在充电时发生爆炸。 3.在对锂电进行充电时一定要有人在场,不要在无人在场时对锂电进行充电,曾经有人因为这个原因把房子跟车子给烧掉了,切记切记。

  4.在充电时请准备一个合适的平台放置你的充电器以及锂电,以确保当锂电因为意外发生爆炸或是火灾时不会造成任何的损坏和危险。要预留防火空间,准备消防沙或准备灭火器、壁炉等都是好的选择。

  5.请不要用超过1C的电流进行充电,我个人曾经因为违反这一条规则而在家里造成火灾。

  6.若在充电时有其中一颗锂电发生膨胀的现象,当它还在发热时千万不要搓破它。把锂电池放在盐水中,等到有问题的cell冷却之后,小心地把锂电池组的外皮剥掉然后再把电池组放回盐水中,之后才能安全地把有问题的锂电丢到回收桶中。

  7.非常重要:当你用锂电飞行不幸摔机,此时锂电池是被放置在飞机中,或许电池看起来没有受损。不过仍要请您千万小心地把锂电池从飞机上拆下,然后静置在安全的地方至少20分钟以上以确保锂电真的没有受损无爆炸之虞。有好几起火灾例子是在发生摔机后,机主把飞机尸体丢在车子里,然后受损的锂电在车内发生爆炸把整台车子都烧光光。

  8.请在开放通风的地方进行锂电的充电,因为若是锂电池真的发生破裂跟爆炸,则危险有害的烟雾及物质会从电池外泄出来。

  9.当您使用锂电池进行飞行或是充电时,请准备一桶沙子在旁边,当发生锂电爆炸时用沙子灭火这是最经济有效的方法,这个作法非常的便宜而且是必须的。

  10.请了解这些电池是有危险性的,不要有“我不会那么衰,这不会发生在我身上”的想法,否则搞不好下一个在着火的房子或车子里拯救妻儿的人就是你,我非常重视这点。

  至此我们已经涵盖一些重点的主题,再来讲点比较不那么严重的:

  二、什么是锂聚合电池?

  锂聚合电池被应用在很多电子装置上。随便举例就有手机、笔记本计电脑、PDA和随身听等。不过大部分的锂电池不是被设计来用在遥控模型上的,我们把锂电用在遥控模型上,这并未在这些锂电池当初被设计出来所考量的应用用途之内。锂聚合电池与锂离子电池相似的是单颗电压通常都是3.6V,不过与锂离子电池不同的是锂离子电池外壳通常是硬壳的,而锂聚合物电池的外壳则是软壳的。一般的锂聚合物电池是薄长方形并且在上方有两个突出点,一为正极一为负极。

  我们使用锂电池的原因是锂电池显著比镍镉或是镍氢电池在重量上轻很多,这可以使我们的飞机飞得更久更好。此外,聚合物锂电池的安全性比金属外壳的液态锂离子电池的安全性更高,聚合物锂电池不爆炸、不燃烧,使用非常安全。但我们还是要提醒您小心使用,短路也是造成间接燃烧的可能因素!

  三、电压与电池数的计算

  锂聚合物电池在充电与放电时的特性与镍镉(Ni-Cd)与镍氢(Ni-MH)电池有所不同,当单颗锂电池充饱电时的电压约为4.2V,全放电完时的单颗电压则约为3V。我们在使用上锂电池时要保持单颗锂电池的电压介于3~4.2V之间,过充与过放皆会对锂电池造成伤害。不要忘记设定你的电子变速器的截止放电电压以避免锂电过放。

  如果您有使用过镍镉(Ni-Cd)与镍氢(Ni-MH)电池进行飞行,由于单颗镍镉(Ni-Cd)与镍氢(Ni-MH)电池的电压为1.2V,而锂电池则是3.6V,因此您必需进行一些换算。如果原来是用6~7颗镍镉或镍氢电池,则可用两颗锂电池串联以取得近似的电压。如果原来是用10~11颗镍镉或镍氢电池,则可用三颗锂电池串连以取得近似的电压。

  有许多飞友原来是用8颗镍镉或镍氢电池,则会有卡在该选择两颗或是三颗锂电池串连以取得近似的电压的选择之中。以我的经验来说,最好选择的方法应该是要先了解之前在使用镍镉或镍氢电池飞行时,所需消耗的功率瓦数(W),再透过搭配使用锂电、马达、螺旋桨以取得进似的功率输出。

  举例来说:如果你之前的飞机是用400级的马达,使用8颗镍镉或镍氢电池(9.6V),飞行时电流为10安培。则你每秒需要损耗9.6×10 = 96 (W)瓦的功率,因此若您使用两颗锂电池(7.2V),则你可能得换桨飞行,电流为13安培;或是使用三颗锂电池(10.8V),并换桨飞行,让电流为8.9安培。诸如此类的搭配估计需要一点经验,以求得最好的搭配效果,不过计算功率输出以此为基准来进行估计是一个不错的开始方式。

  四、利用3S4P(3串4并)来取得10C的锂电池电流放电能力

  电池放电的速度取决于瞬间所能提供的最大电流输出。电流输出通常使用“C”这个字来估计,C代表的是:60分钟/电池放电完毕所需分钟。

  举例来说1C代表这颗电池花1小时(60分钟)把电力放完;2C代表这颗电池花0.5小时(30分钟)把电力放完。

  所有的电池都是用“毫安培小时(mAh)”来计算电池的容量。假设一颗电池标示2000mAh,则代表当我们使用2000mA(等于2A)的电流对其进行放电时,其需要花费一小时才能放电完毕。电池在使用时是以多少C来进行放电跟电池的容量有关。若一颗2000mah的电池以2A的电流放电,则是属于1C放电;若以6A的电流放电,则是属于3C放电(6A = 6000mA = 2000mA * 3)。

  目前的锂电池科技尚无法让锂电池拥有像镍镉或镍氢电池般的高C数大电流放电能耐,因此许多锂电池组透过并联的方式取得更高的瞬间放电电流的能力。当两组电池透过正极接正极、负极接负极的方式并联成一颗更大的电池时,此时电池的电压不变、电容量则倍增成两倍。如果您有两颗2000mAh的电池,如果您将它们进行并联,则效果相当于1颗4000mAh的电池组。这组4000mAh的电池组其最高放电C数跟原来2000mAh的电池是一样的,不过由于电容量倍增的关系,假设原来2000mAh的电池最高可以5C放电提供10A的最大电流;透过并联两组2000mAh的电池而得来的4000mAh电池同样是5C放电,其最大放电电流则提升至20A。透过这个方式可以让锂电池组提供单一颗锂电池所无法提供之瞬间高电流输出的能力。

  透过XSXP的命名方式可以让我们很容易的了解一个电池组是由多少颗电池进行串联来提高电压、由多少组同电压电池组并联来提高放电电流。其中前面的“S”代表的是串联(Series);后面的“P”代表的是并联(Parallel)。因此一个由单颗2100mAh的锂电池所组成3S4P的电池组,其意味着由12颗锂电池所组成,其电压为单颗锂电池的三倍,放电电流能力为单颗锂电池的四倍。因此若这组电池组的最大放电C数为6C,则代表了他是一组电压为10.8V(3×3.6),并提供最高50.4A放电电流(2100mAh × 6C × 4P = 2.1A × 6 × 4 = 50.4 A)的锂电池组。

  五、一般使用提示

  1.锂电池在寒冷的天气无法发挥应有的性能,若您在冬天进行飞行,在未使用前可以将电池放在车内以求锂电池发挥应有的性能。

  2.注意不要让电池过热,使用时尽量保持电池温度在华氏温度140~160度左右可以让您的锂电池活久一点。

  3.不要让锂电池超过其原本设计最大的放电C数放电(不要让锂电池过电流放电),这将会造成电池的损坏,并让电池的原本最大电池容量降低。如果你在对锂电池进行充电后发现你只能充进原本电池标称容量的二分之一或是四分之三时,你很有可能是因为在使用锂电池时,使用过高的电流放电导致电池受损的关系(前提是电池容量没有不实标示)。

  4.监控一电池组内的个别单颗锂电池的电压,保持同一电池组内之各颗锂电池的电压一致是很重要的,这可以让使用时的安全性增加,并且延长电池寿命。

  5.若您是自行制作锂电池组,请记得在每颗锂电池间保持一些空隙以利电池的散热,当在制作两颗以上的锂电池组时这是最重要的了。

  6.有些锂聚合物电池的正负极接点是使用铝的材质,如果你要对其进行焊接,必须记住一般的焊接程序无法使用在铝质接点上,你可能得买焊接铝用的焊接片,通常卖给你这种电池的厂商那边也会有销售焊接片。

电动模型基础知识

电机KV值:电机的转速(空载)=KV值X电压;例如KV1000的电机在10V电压下它的转速(空载)就是10000转/分钟。

电机的KV值越高,提供出来的扭力就越小。所以,KV值的大小就与浆有着密切的关系,以下就这点提供一下配浆经验:

1060浆,10代表长的直径是10寸,60表示浆角(螺距).
            前两位数表示直径,后两位表示螺距。

电池的放电能力,最大持续电流是:容量X放电C数
例如:1500MA,10C,    则最大的持续电流就是=1.5X10=15安
如果该电池长时间超过15安或以上电流工作,那么电池的寿命会变短、还有电池的充满电压单片4.15-4.20合适,用后的最低电压为单片3.7以上(切记不要过放),长期不用的保存电压最好为3.9。

一般电机与浆是这样配的:
3S电池下;KV900-1000的电机配1060或1047浆,9寸浆也可
               KV1200-1400配9050(9寸浆)至8*6浆
               KV1600-1800左右的7寸至6寸浆
               KV2200-2800左右的5寸浆
               KV3000-3500左右的4530浆

2S电池下;KV1300-1500左右用9050浆
               KV1800左右用7060浆
               KV2500-3000左右用5X3浆
               KV3200-4000左右用4530浆

浆的大小与电流关系:因为浆相对越大在产生推力的效率就越高
      例如:同用3S电池,电流同样是10安(假设)
      用KV1000配1060浆 与  KV3000配4530浆它们分别产生的推力前者是后者的两倍。

机型与电机、浆的关系:

一般来说:浆越大对飞机所产生的反扭力越大,所以浆的大小与机的翼展大小有着一定关系,但浆与电机也有着上面所讲的关系。

       例如用1060浆,机的翼展就得要在80CM以上为合适,不然的话机就容易造成反扭;又如用8*6的浆翼展就得在60以上。
     
      再比如:用4530浆做翼展1米以上机行否?  是可以, 但飞机飞起来会很耗电,因为翼展大飞行的阻力大,而4530浆产生的推力相对情况下小(上面浆的大小与电流关系有讲到)。

  
   所以模友在选择玩什么机型的时候就要注意这4者的关系,尤其是新手选择机型,一定要看这机型翼展大小选择配电机、浆、电池,特别要注意的是,不能用大浆配高KV的电机,否则烧电机还影响了电池,有可能连电调也烧掉。

另外,有些模友误认为,电机的推力越大,飞机就能更加克服阻力飞得更快,这个问题就留给有兴趣的模友去讨论一下了。

锂聚合物电池的使用方法

锂聚合物电池如何才能作为既好用,寿命又不错呢?我个人在使用中总结了以下的一些经验与大家分享一下.

我的充电器是DIY的,用的KD和CASIO充电器改装的,截止电压可任意在4-4.25V间调节.

1/新电池到手,先检查各单片电压,正常的话电压会在3.8-4V间的,视各厂家不同电压不同,我的电池是3.9-4V间的.同一组合中单片间电压不应该最大差大于0.03V.

2/关于激活的问题,新电池到手,应先完成上面1步骤,然后以小于0.8C的电流充电到4.15V,如果电压控制不方便,4.20V不超过是没问题的,然后以小于5C的电流放电至3.8V,30分钟后再进行上面相同条件下的充放电,如此循环3-5次,可视为激活程序完成.

3/使用中的问题,如果你购买的电池是15C的,并不代表在15C的持续放电下能达到所谓的100次甚至200次的循环次数,这个15C,指的是在该放电电流下,电池能在1次循环中完成从空载4.20放电到空载3.70V这个过程而不发生损坏,而与使用次数无关,C数指的是电池的放电性能,而不是放电次数的多少,所以,当你想达到电池能有100循环甚至200循环的话,最好在这个持续电流上放电能控制到30秒内,电池的瞬间C数,是电池能在瞬间支持的最大电流,这个电流是不能超过5秒的,一般来说,3秒内比较安全.这就和你使用的动力系统的效率有很大的关系了,也就是电机的效率

现在卖的比如60一个的电机,号称1。2KG拉力,电流24A
另一个也是1200克拉力,电流17A,价格400,就看你选哪一个了
选前者,电机便宜了
电池坏到你痛
选后者,一次投资可能高
但是电池就不怎么操心,不担心会坏那么多
假如都选1700MA电池,满足这2个电机,电池价格140一组,
前者坏3组电池就多的钱都去了,而且你投入了那么多钱,电机也还是那个样子,电池也坏了
后者呢?电池继续在用,电机也好用,何乐而不为呢?

4/关于放电的问题,在使用中,怎么样的截止电压是安全的呢?明确的说,任何一件物品,如果你不把它使用到极限,那么它的寿命一定会更长,电调的所谓的保护电压是不安全的,比如一只电调,你设置保护电压到3.3V,那么是不是就安全呢?答案是否定的,因为和你放电的电流很大关系,电流大,压降大,电流小,压降小,所以当你越小电流放电,这个保护电压的反应就越迟钝,那么电池损坏的可能性就越大.

当151000MA电池,以13C放电,到负载3.3V保护的时候,这时候可能电池实际电量已经小于10%,电压低于3.0V的可能性会增加,而当你用1C放电的话,很有可能在这个电压已经把电量放光.所以是很容易损坏的,正确的电压应该是控制在空载3.7V,那么这个电压如何把握呢?

第一次使用新型号的电池,带个表去,以正常飞行的电流或者飞行习惯来进行估算,每2分钟下来量一下电压,低于单片3.7V空载就不飞了,
计算好大概时间,以后飞在这个时间基础上缩短1分钟时间
因为LI电的放电平台是3,7V,低于空载3.7V的时候,
电量不会超过15%的,这个时候还继续放电,电池就很危险,而且电池组在空载电压低于单片3.7V后,片间电压会差距拉大,这是因为这个放电平台所决定了的,我曾经发现3片电池组,在3.7V空载以上的时候,很少超过压差到0.05V的,但是低于3.7V空载的话,这个压差甚至达到了0.3V.

所以当你缩短这一分钟的飞行时间后,你可能就挽救了一组电池.电池不是吹嘘性能就能满足要求的,不是说这个电池可以放电到2.7V,充电高于4.3V这些数据就有用的,这些数据都只会让你掏更多次的钱包继续购买,所以掌握正确的使用方法,能让你少花钱,飞更多次,使用以上办法的飞友购买我的电池,已经大把人超过100循环,甚至200循环,有人用15C2200MA甚至飞到了210循环后还能坚持4分钟的航线,当然,此时电池性能已经下降很多,做任何的3D动作也已经显得无力,也有人第一次用,就电调保护,来问我为什么现在飞着没力,是不是电池有问题.所以,最好还是给一个正确的办法给大家,才是好办法.

5/保存,锂聚合物电池正确的保存方法是这样的"3.8-4V保存,每1-2周做一次1C以内充电,5C以内放电的循环,放电到3.7V后充到3.8-4V继续保存.防晒,防潮.防高温.保存温度在10-30C度为好.我做过极限测试,4.05V保存了2个月,电池未损坏,但容量下降了5%.

6/充电器的要求,要求平衡充,截止电压不得高于4.20V,片间压差不得高于0.02V,电流以小于或者等于1C为好,我个人认为0.5-0.8C为最佳.