【概要】
UltraGridのセルの入力文字数の上限値を、シフトJISでのバイト長を基準に設定したい
【該当するコンポーネント】
UltraGrid
【該当するバージョン】
全てのバージョン
【記事の種類】
FAQ
【詳細】
NetAdvantageのビルドイン機能としてはバイト長での文字数制限を行う機能はありません。UltraGridの場合、CellChangeイベントをハンドルし、文字列が変更されたタイミングで文字列の変換とバイト長での編集を行うことで、同様の処理を実現することができます。
(C#のサンプル)
/// <summary> /// バイト数判定に用いるShiftJis用Encoding /// </summary> public Encoding ShiftJisEncoding { get { return Encoding.GetEncoding("shift-jis"); } } private void ultraGrid1_CellChange(object sender, CellEventArgs e) { //Text列のときのみ処理を行います if (e.Cell.Column.Key == "Text") { //バイト長 int length = (int)e.Cell.Row.Cells["Length"].Value; //ShiftJisでのバイト配列を取得します byte[] bs = ShiftJisEncoding.GetBytes(e.Cell.Text); //指定の長さよりもバイト長が長い場合 if (bs.Length > length) { //最後の文字が漢字の上位バイトであれば、無視します byte last = bs[length - 1]; if ((last >= 0x81 && last <= 0x9f) || (last >= 0xe0 && last <= 0xfc)) { length -= 1; } e.Cell.Value = ShiftJisEncoding.GetString(bs, 0, length); //カーソルの位置が最後にくるように調整します e.Cell.SelStart = e.Cell.Text.Length; } } }