Forget about custom control. Lets make a new component. This component inherits from textbox class. Add this component into your ToolBox Panel. Right Click at ToolboxPanel, choose add/remove items, click browse then point to IMAWA.AdvCom.dll file.
Imports System.Globalization
'Coding by : I Made Agus W.A (bluechip_asia@yahoo.com / made.in.indonesia@gmail.com)
'This Source Code was distributed for Educational Purposes Only
Public Class AdvTextBox
Inherits System.Web.UI.WebControls.TextBox
Dim varUpperCase As Boolean = False
Dim varLowerCase As Boolean = False
Dim varNumeric As Boolean = False
Dim varCharFilter As String = ""
Dim varDecimalMode As Boolean = False
Dim varMarkIfEmpty As Boolean = False
Dim varMasking As String = ""
Dim varDataGroup As String = ""
Dim VarSqlDbType As SqlDbType = SqlDbType.Char
Dim VarDataLength As Integer = 0
Dim varParameterDirection As ParameterDirection = ParameterDirection.InputOutput
Dim varDataField As String = ""
Dim varEnabledEncode95 As Boolean = False
Dim varDataTitle As String = ""
Dim varShowOnGrid As Boolean = True
Dim varShowOnSearch As Boolean = True
Dim varRegisteredControl As Boolean = True
#Region "Decimal Handling Variable"
Dim Koma As Char = ","
Dim Ttk As Char = "."
Dim Rata As Integer = 25
Dim Perintah As String = ""
#End Region
#Region "Decimal Properties"
Public Property DecimalChar() As Char
Get
Return Koma
End Get
Set(ByVal Value As Char)
Koma = Value
End Set
End Property
Public Property SeparatorChar() As Char
Get
Return Ttk
End Get
Set(ByVal Value As Char)
Ttk = Value
End Set
End Property
Public Property DecimalAlign() As Byte
Get
Return CInt(Rata)
End Get
Set(ByVal Value As Byte)
Rata = Value.ToString.Trim
End Set
End Property
#End Region
#Region "Decimal Private Function"
Private Function getmark() As Char
Dim mystr As String = ((3 / 100) + 13).ToString
Dim ttk As Integer = mystr.IndexOf(".")
If ttk > 0 Then
Return "."
Else
Return ","
End If
End Function
Private Function clearvalue(ByVal myvalue As String) As String
Dim i As Integer = 0
Dim mystr As String = ""
For i = 0 To myvalue.Length - 1
If myvalue.Chars(i) <> Ttk Then
If myvalue.Chars(i) = Koma Then
mystr += getmark()
Else
mystr += myvalue.Chars(i)
End If
End If
Next
Return mystr
End Function
Private Function reversestring(ByVal mydata As String) As String
Dim myhasil As String = ""
Dim i As Integer
If mydata.Length > 1 Then
For i = 0 To (mydata.Length - 1)
myhasil = mydata.Chars(i) + myhasil
Next
Else
myhasil = mydata
End If
Return myhasil
End Function
Private Function alignstring(ByVal mydata As String)
Dim myhasil As String = mydata
If (Rata > 0) Then
While (myhasil.Length < Rata)
myhasil = " " + myhasil
End While
End If
Return myhasil
End Function
Private Function ParseMoney(ByVal myvalue As String) As String
Dim pos As Integer = 0
Dim ekstensi As String = ""
Dim negatif As String = ""
Dim i As Integer
For i = 0 To myvalue.Length - 1
If (myvalue.Chars(i) = Ttk) Or (myvalue.Chars(i) = Koma) Then
pos = i
End If
If myvalue.Chars(i) = "-" Then
negatif = "-"
End If
Next
Dim hasil As String = ""
Dim selesai As String = ""
If pos > 0 Then
For i = 0 To (pos - 1)
hasil += myvalue.Chars(i)
Next
For i = (pos + 1) To (myvalue.Length - 1)
ekstensi += myvalue.Chars(i)
Next
Else
hasil = myvalue
End If
If ekstensi = "" Then
ekstensi = "0"
End If
If hasil.Length > 1 Then
hasil = reversestring(hasil)
For i = 0 To hasil.Length - 1
selesai += hasil.Chars(i)
If (i + 1) Mod 3 = 0 Then
If (i < (hasil.Length - 1)) Then
selesai += Ttk
End If
End If
Next
Return alignstring(reversestring(selesai) + Koma + ekstensi)
Else
Return alignstring(negatif + hasil + Koma + ekstensi)
End If
End Function
#End Region
#Region "Script Handling"
Private Sub RegisterInitialScript()
Dim MyScript As String = "<script>"
MyScript &= "function ismatchchar(mychar, myrange) {for (var myhasil=false,i = 0; i < myrange.length; i++) {" & vbCrLf
MyScript &= "if (myrange.charAt(i) == mychar){myhasil=true;}}return myhasil;}" & vbCrLf
MyScript &= "function textfilter(myobj,myrange) {" & vbCrLf
MyScript &= "mydata = document.forms[0].elements[myobj].value;" & vbCrLf
MyScript &= "for (var myhasil = '',i = 0; i < mydata.length; i++) {" & vbCrLf
MyScript &= "if (ismatchchar(mydata.charAt(i),myrange) == true) {myhasil += mydata.charAt(i);}} " & vbCrLf
MyScript &= "document.forms[0].elements[myobj].value = myhasil;return myhasil;}" & vbCrLf
MyScript &= "</Script>" & vbCrLf
If Not Page.IsStartupScriptRegistered("InitialScript") Then
Page.RegisterStartupScript("InitialScript", MyScript)
End If
End Sub
Private Sub RegisterDecimalScript()
Dim MyScript, DateFormat As String
MyScript = ""
MyScript &= "<Script>" & vbCrLf
'Get character position
MyScript &= "function getpos(myvalue, mymark) {" & vbCrLf
MyScript &= "mypos=0;" & vbCrLf
MyScript &= "for (i = 0; i < myvalue.length; i++) {" & vbCrLf
MyScript &= " if (myvalue.charAt(i) == mymark) {" & vbCrLf
MyScript &= " mypos=i;" & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= "return mypos;" & vbCrLf
MyScript &= "}" & vbCrLf
'Filtering string
MyScript &= "function stringfilter(mydata,myrange) {" & vbCrLf
MyScript &= "for (var myhasil = '',i = 0; i < mydata.length; i++) {" & vbCrLf
MyScript &= " if (ismatchchar(mydata.charAt(i),myrange) == true) {" & vbCrLf
MyScript &= " myhasil += mydata.charAt(i); " & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= " } " & vbCrLf
MyScript &= "return myhasil" & vbCrLf
MyScript &= "}" & vbCrLf
'Get Numeric
MyScript &= "function getnumeric(mytype, myvalue, mymark) {" & vbCrLf
MyScript &= "mypos=getpos(myvalue,mymark);" & vbCrLf
MyScript &= "myres='';" & vbCrLf
MyScript &= "if (mytype.toLowerCase() == 'decimal') {" & vbCrLf
MyScript &= " if (mypos != 0) {" & vbCrLf
MyScript &= " for (i=mypos+1; i < myvalue.length; i++) {" & vbCrLf
MyScript &= " myres += myvalue.charAt(i);" & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= " else {" & vbCrLf
MyScript &= " myres = '0';" & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= "}" & vbCrLf
MyScript &= "if (mypos == 0) {" & vbCrLf
MyScript &= " mypos=myvalue.length;" & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= "if (mytype.toLowerCase() == 'integer') {" & vbCrLf
MyScript &= "for (i=0; i < mypos; i++) {" & vbCrLf
MyScript &= " myres += myvalue.charAt(i);" & vbCrLf
MyScript &= " } " & vbCrLf
MyScript &= "}" & vbCrLf
MyScript &= "return myres;" & vbCrLf
MyScript &= "}" & vbCrLf
'Reverse string
MyScript &= "function reversestring (mydata) {" & vbCrLf
MyScript &= " for (var myhasil = '',i=mydata.length-1;i>-1;i=i-1){" & vbCrLf
MyScript &= " myhasil += mydata.charAt(i);" & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= " return myhasil;" & vbCrLf
MyScript &= "}" & vbCrLf
'Set Align to the Left
MyScript &= "function alignstring(mydata,mynum) {" & vbCrLf
MyScript &= "myhasil = mydata;" & vbCrLf
MyScript &= "if (mynum > 0) {" & vbCrLf
MyScript &= " while (myhasil.length < mynum) {" & vbCrLf
MyScript &= " myhasil = ' '+myhasil;" & vbCrLf
MyScript &= " }" & vbCrLf
MyScript &= " } " & vbCrLf
MyScript &= "return myhasil " & vbCrLf
MyScript &= "}" & vbCrLf
MyScript &= "function valcurrnum(myobj,mymark,mydec,mynum) {" & vbCrLf
MyScript &= "if (ismatchchar('-',eval('document.forms[0].' + myobj).value)== true) {" & vbCrLf
MyScript &= "negatif = '-';" & vbCrLf
MyScript &= "} else {" & vbCrLf
MyScript &= "negatif = '' ;" & vbCrLf
MyScript &= "}" & vbCrLf
MyScript &= "mynilai = eval('document.forms[0].' + myobj).value;" & vbCrLf
MyScript &= "mytemp = getnumeric('integer',mynilai,mydec);" & vbCrLf
MyScript &= "mytemp = stringfilter(mytemp,'0123456789');" & vbCrLf
MyScript &= "myint = reversestring(mytemp);" & vbCrLf
MyScript &= "for (var myhasil = '',i = 0; i < myint.length; i=i+1) {" & vbCrLf
MyScript &= "myhasil += myint.charAt(i);" & vbCrLf
MyScript &= "if ((i+1) % 3 == 0){" & vbCrLf
MyScript &= "if (i < (myint.length - 1)){" & vbCrLf
MyScript &= "myhasil += mymark;" & vbCrLf
MyScript &= "}" & vbCrLf
MyScript &= "}" & vbCrLf
MyScript &= "}" & vbCrLf
MyScript &= "eval('document.forms[0].' + myobj).value = alignstring(negatif+reversestring(myhasil)+mydec+getnumeric('decimal',mynilai,mydec),mynum);" & vbCrLf
MyScript &= "}" & vbCrLf
'MyScript &= "function update() {" & vbCrLf
'MyScript &= "valcurrnum('" + ClientID.Trim + "',ttk,kma,rata);" & vbCrLf
'MyScript &= "}" & vbCrLf
MyScript &= "</Script>" & vbCrLf
If Not Page.IsStartupScriptRegistered("CurrencyVerification") Then
Page.RegisterStartupScript("CurrencyVerification", MyScript)
End If
End Sub
#End Region
#Region "General Property"
Public Property UpperCase() As Boolean
Get
Return varUpperCase
End Get
Set(ByVal Value As Boolean)
varUpperCase = Value
If UpperCase = True Then
LowerCase = False
NumericMode = False
DecimalMode = False
Me.Attributes.Add("onChange", "javascript:this.value=this.value.toUpperCase();") 'uppertextbox('" + ClientID + "');
End If
End Set
End Property
Public Property LowerCase() As Boolean
Get
Return varLowerCase
End Get
Set(ByVal Value As Boolean)
varLowerCase = Value
If LowerCase Then
UpperCase = False
NumericMode = False
DecimalMode = False
Attributes.Add("OnChange", "javascript:this.value=this.value.toLowerCase();")
End If
End Set
End Property
Public Property NumericMode() As Boolean
Get
Return varNumeric
End Get
Set(ByVal Value As Boolean)
varNumeric = Value
If NumericMode = True Then
PropertyOn("NumericMode")
Attributes.Add("OnChange", "javascript:textfilter('" + ClientID + "','0123456789');")
End If
End Set
End Property
Public Property TextFilter() As String
Get
Return varCharFilter
End Get
Set(ByVal Value As String)
varCharFilter = Value
If TextFilter.Length > 0 Then
PropertyOn("textfilter")
Me.Attributes.Add("OnChange", "javascript:this.value=stringfilter(this.value,'" + TextFilter + "');")
End If
End Set
End Property
Public Property DecimalMode() As Boolean
Get
Return varDecimalMode
End Get
Set(ByVal Value As Boolean)
varDecimalMode = Value
If DecimalMode = True Then
PropertyOn("DecimalMode")
Attributes.Add("onChange", "javascript:valcurrnum('" + ClientID + "','" + Ttk + "','" + Koma + "'," + Rata.ToString + ");")
End If
End Set
End Property
Public Property MarkIfEmpty() As Boolean
Get
Return varMarkIfEmpty
End Get
Set(ByVal Value As Boolean)
varMarkIfEmpty = Value
End Set
End Property
Public ReadOnly Property CustomMask() As String
Get
Return varMasking
End Get
'Set(ByVal Value As String)
' varMasking = Value
'End Set
End Property
Private Sub PropertyOn(ByVal ActiveProperty As String)
If Not ActiveProperty.ToLower = "uppercase" Then
UpperCase = False
End If
If Not ActiveProperty.ToLower = "lowercase" Then
LowerCase = False
End If
If Not ActiveProperty.ToLower = "numericmode" Then
NumericMode = False
End If
If Not ActiveProperty.ToLower = "textfilter" Then
TextFilter = ""
End If
If Not ActiveProperty.ToLower = "decimalmode" Then
DecimalMode = False
End If
End Sub
#End Region
#Region "Data Access Handling"
Public Property DataGroup() As String
Get
Return varDataGroup.ToUpper
End Get
Set(ByVal Value As String)
varDataGroup = Value.ToUpper.Trim
If DataField.Length > 0 Then
ID = "tb_" + DataGroup.ToUpper + DataField.ToLower
End If
End Set
End Property
Public Property DataType() As SqlDbType
Get
Return VarSqlDbType
End Get
Set(ByVal Value As SqlDbType)
VarSqlDbType = Value
End Set
End Property
Public Property DataLength() As Integer
Get
Return VarDataLength
End Get
Set(ByVal Value As Integer)
VarDataLength = Value
End Set
End Property
Public Property ParameterDirection() As ParameterDirection
Get
Return varParameterDirection
End Get
Set(ByVal Value As ParameterDirection)
varParameterDirection = Value
End Set
End Property
Public Property DataField() As String
Get
Return varDataField
End Get
Set(ByVal Value As String)
varDataField = Value.Trim
If DataField.Length > 0 Then
ID = "tb_" + DataGroup.ToUpper + Value.ToLower
End If
If DataTitle.Length > 0 Then
DataTitle = DataField
End If
End Set
End Property
Public Property EnabledEncode95() As Boolean
Get
Return varEnabledEncode95
End Get
Set(ByVal Value As Boolean)
varEnabledEncode95 = Value
End Set
End Property
Public Property DataTitle() As String
Get
Return varDataTitle
End Get
Set(ByVal Value As String)
varDataTitle = Value.Trim
If DataTitle.Length = 0 Then
varDataTitle = DataField.ToUpper
End If
End Set
End Property
Public Property ShowOnGrid() As Boolean
Get
Return varShowOnGrid
End Get
Set(ByVal Value As Boolean)
varShowOnGrid = Value
End Set
End Property
Public Property ShowOnSearch() As Boolean
Get
Return varShowOnSearch
End Get
Set(ByVal Value As Boolean)
varShowOnSearch = Value
End Set
End Property
Public Property RegisteredControl() As Boolean
Get
Return varRegisteredControl
End Get
Set(ByVal Value As Boolean)
varRegisteredControl = Value
End Set
End Property
Public Function GetSQLParameterGroup() As SqlClient.SqlParameter()
Dim i As Integer
Dim Count As Integer = 0
Dim MyObj As Object
Dim MyValue As String
Dim sqlparam() As SqlClient.SqlParameter
Dim MySession() As String
Try
For i = 0 To Page.Session.Count - 1
MySession = Page.Session.Item(i).ToString.Split("=")
If Page.Session.Item(i).ToString.IndexOf("=") >= 0 Then
If MySession(1).ToLower = Me.GetType.Name.ToLower Then
MyObj = FindControl(MySession(0))
If MyObj.DataGroup = Me.DataGroup Then
ReDim Preserve sqlparam(i)
If MyObj.EnabledEncode95 Then
MyValue = MyObj.toEncode95Text
Else
MyValue = MyObj.Text.ToString.Trim
End If
sqlparam(i) = New SqlClient.SqlParameter("@" + MyObj.DataField, MyObj.DataType, MyObj.DataLength, MyObj.ParameterDirection, True, 0, 0, "", DataRowVersion.Current, MyValue)
End If
End If
End If
Next
Catch ex As Exception
End Try
Return sqlparam
End Function
Public Function GetParameterString() As String
End Function
Public Function GetCodeBlindString() As String
End Function
Public Function GetListItemString() As String
End Function
#End Region
#Region "Encryption"
Private Function Encode95(ByVal OriginalString As String) As String
End Function
Private Function Encode95(ByVal OriginalString As String, ByVal HeaderKey As Byte) As String
End Function
Private Function Decode95(ByVal EncodeString As String) As String
End Function
Private Function isValidCode95HeaderKey(ByVal EncodeString As String, ByVal HeaderKey As Byte) As Boolean
End Function
Public Function toEncode95Text() As String
Return Encode95(Text)
End Function
Public Sub Encode95Text(ByVal value As String)
Text = Decode95(value)
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RegisterInitialScript()
If (DecimalMode = True) Or (TextFilter.Length > 0) Then
RegisterDecimalScript()
End If
If Page.IsPostBack Then
If (Text.Length = 0) And (MarkIfEmpty = True) Then
BorderColor = System.Drawing.Color.Red
End If
End If
If Not Font.Name.Length > 0 Then
Font.Name = "Times New Roman"
End If
Hidden()
If Me.ReadOnly Then
ForeColor = System.Drawing.Color.Silver
End If
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
If RegisteredControl Then
Page.Session.Add(ID, ID + "=AdvTextBox")
End If
End Sub
Public Sub Hidden()
If Visible = False Then
Page.RegisterHiddenField(ClientID, Text)
End If
End Sub
End Class