C#でバイト長による入力制限を持ったTextBoxを作る(WinForms)

クリップボードからペーストされた時のチェックは未対応です。
Validatingイベント、Validatedイベント等でのチェック処理や入力値を用いる処理直前での値チェックは必要不可欠です。

TextChangedイベントで入力可能桁数を制限します。

//この文字コードで扱う場合のバイト数で入力文字数を制限する
private Encoding ENCODE_BYTECHK = Encoding.GetEncoding("Shift_JIS");

private void textBox3_TextChanged(object sender, EventArgs e)
{
    var txtBox = sender as TextBox;

    try
    {
        txtBox.TextChanged -= textBox3_TextChanged;

        if (!string.IsNullOrWhiteSpace(txtBox.Text))
        {
            var value = txtBox.Text.Trim();
            if (ENCODE_BYTECHK.GetByteCount(value) > txtBox.MaxLength)
            {
                // 入力可能桁数を超えているので今入力されたものを無効にしてしまう
                int currentPoint = txtBox.SelectionStart;
                var leftStr = value.Substring(0, currentPoint > txtBox.MaxLength ? txtBox.MaxLength : currentPoint - 1);
                var rightStr = leftStr.Length >= txtBox.MaxLength ? "" : value.Substring(currentPoint);
                txtBox.Text = leftStr + rightStr;
                txtBox.SelectionStart = currentPoint - 1;
            }
        }
    }
    finally
    {
        txtBox.TextChanged += textBox3_TextChanged;
    }

}