投稿日 | : 2003/01/24(Fri) 10:39 |
投稿者 | : takk |
Eメール | : |
URL | : |
タイトル | : Re: TextBoxでのバイト数による入力制限について |
VB.NETだとAPIでのバイト制限がうまく行かないんですよね。
僕の場合はこんな風にやってます。
以下のソースで試してみてください。
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim sData As String, sBuff As String
Dim iPos As Integer, iMax As Integer, iLen As Integer, iBuff As Integer
Dim bNowChange As Boolean
If bNowChange Then Exit Sub
bNowChange = True
iPos = sender.SelectionStart
iMax = sender.MaxLength
sData = sender.Text
iLen = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sData)
If iLen > iMax Then
'MaxLength(Byte)をオーバーしていたら
iBuff = iMax - iPos
If iBuff <= 0 Then
'後ろを削除
Do Until (System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sData) <= iMax)
sData = sData.Substring(0, sData.Length - 1)
Loop
Else
'現在位置より前を削除
sBuff = sData.Substring(iPos)
iLen = iMax - System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sBuff)
Do Until (System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(sData) <= iLen)
sData = sData.Substring(0, sData.Length - 1)
Loop
iPos = sData.Length
sData = sData & sBuff
End If
'結果を返す
sender.Text = sData
sender.SelectionStart = iPos
End If
bNowChange = False
End Sub