作成日: 2021/08/10 最終更新日: 2021/12/22
文書種別
不具合
状況
修正済み
詳細
C1TextBoxのMaxLengthを設定しても、その長さを超えて2バイト文字を貼り付けられる場合があります。
この現象は以下の要件で発生します。
・C1TextBoxのMaxLengthUnitを「Byte」に設定
・C1TextBoxのMaxLengthを奇数に設定(例:255)
・クリップボード経由で2バイト文字を貼り付ける
上記の例の場合、254バイトの文字列が設定されているC1TextBoxに、クリップボード経由で2バイト文字(例:"あいう")を貼り付けると、1文字("あ")分の入力ができてしまいます。
この現象は以下の要件で発生します。
・C1TextBoxのMaxLengthUnitを「Byte」に設定
・C1TextBoxのMaxLengthを奇数に設定(例:255)
・クリップボード経由で2バイト文字を貼り付ける
上記の例の場合、254バイトの文字列が設定されているC1TextBoxに、クリップボード経由で2バイト文字(例:"あいう")を貼り付けると、1文字("あ")分の入力ができてしまいます。
回避方法
この問題は2021J v3(4.5.20213.532)で修正されました。
※修正版を適用しない場合の回避方法は以下の通りです。
TextChangedイベントで、入力されたテキストのバイト数を確認し、MaxLengthを超過した場合はUndoを呼び 出します。
◎サンプルコード(VB)
※修正版を適用しない場合の回避方法は以下の通りです。
TextChangedイベントで、入力されたテキストのバイト数を確認し、MaxLengthを超過した場合はUndoを呼び 出します。
◎サンプルコード(VB)
Private Sub C1TextBox1_TextChanged(sender As Object, e As EventArgs) Handles C1TextBox1.TextChanged
TextBox1.Text = "Length=" + C1TextBox1.TextLength.ToString()
Dim sjisEnc As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
Dim num As Integer = sjisEnc.GetByteCount(C1TextBox1.Text)
If num > C1TextBox1.MaxLength Then
C1TextBox1.Undo()
End If
End Sub
◎サンプルコード(C#)
private void C1TextBox1_TextChanged(object sender, EventArgs e)
{
TextBox1.Text = ("Length=" + c1TextBox1.TextLength.ToString());
System.Text.Encoding sjisEnc = System.Text.Encoding.GetEncoding("Shift_JIS");
int num = sjisEnc.GetByteCount(c1TextBox1.Text);
if ((num > c1TextBox1.MaxLength))
{
c1TextBox1.Undo();
}
}