上次一時興起,做了一個仿金蝶的憑證金額輸入的控件,今天實際運用了下,修改了幾個操作上的問題,加強了點功能
主要修改如下
1、在金額修改的時候,實現整數位在輸入“.”的時候可以自動跳轉到小數位(紅線後)並複寫小數位
2、修改了小數位能輸入其他非數字的元素
代碼如下
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Voucher
{
[DefaultProperty("jText")]
[ToolboxData(@"<{0}:VoucherInput jText = ''
runat='server'></{0}:VoucherInput>")
]
//設置默認的屬性
public class VoucherInput : WebControl
{
private TextBox _TextBox; //整數位
private TextBox _PTextBox; //小數位
屬性#region 屬性
[
Bindable(true),
Category("Appearance"),
DefaultValue(""),
Description("金額")
]
public string jText
{
get
{
EnsureChildControls();
return _TextBox.Text + "." + _PTextBox.Text;
}
set
{
EnsureChildControls();
if (value == "" || value == null)
{
}
else
{
string[] Allstring = value.Split('.');
_TextBox.Text = Allstring[0];
_PTextBox.Text = Allstring[1];
}
}
}
#endregion Properties delegated to child controls
方法#region 方法
protected override void CreateChildControls()
{
Controls.Clear();
_TextBox = new TextBox();
_TextBox.ID = "TextBox1";
_TextBox.MaxLength = 13;
_TextBox.Width = 120;
_TextBox.Height = 20;
_TextBox.Attributes.Add("onkeypress", "keyPress()");
_TextBox.Style.Add(HtmlTextWriterStyle.BackgroundImage, "url(text.gif)");
_TextBox.Style.Add(HtmlTextWriterStyle.Direction, "rtl");
_TextBox.Style.Add(HtmlTextWriterStyle.BorderWidth, "0");
_PTextBox = new TextBox();
_PTextBox.Width = 15;
_PTextBox.Height = 20;
_PTextBox.MaxLength = 2;
_PTextBox.ID = "PTextBox";
_PTextBox.Style.Add(HtmlTextWriterStyle.BackgroundImage, "url(textPoint.gif)");
_PTextBox.Style.Add(HtmlTextWriterStyle.BorderWidth, "0");
_PTextBox.Attributes.Add("onFocus", "PFocus()");
_PTextBox.Attributes.Add("onkeypress", "PkeyPress()");
this.Controls.Add(_TextBox);
this.Controls.Add(_PTextBox);
}
protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
_TextBox.RenderControl(writer);
_PTextBox.RenderControl(writer);
writer.Write("<script language=javascript>function keyPress(){if(!(event.keyCode>=48&&event.keyCode<=57 ||event.keyCode==46 || event.keyCode==45)){event.keyCode = 0;}if(event.keyCode==46){event.keyCode = 0;document.getElementById('PTextBox').focus();}}</script>"); //對字符的控制
writer.Write("<script language=javascript>function PFocus(){ var box=document.getElementById('PTextBox'); var rng = box.createTextRange(); rng.collapse(true); rng.moveEnd('character',2); rng.moveStart('character',0); rng.select(); }</script>");
writer.Write("<script language=javascript>function PkeyPress(){if(event.keyCode==46){event.keyCode = 0;} if(!(event.keyCode>=48&&event.keyCode<=57 ||event.keyCode==46 || event.keyCode==45)){event.keyCode = 0;} }</script>");
}
#endregion Overriden methods
}
}
總結:老問題還是沒解決,刪金額的時候還是小數位和整數位分開刪除的,主要原因是因爲我現在不能通過光標來判斷是否需要轉到整數位