ホーム
ブログ
フォーラムとナレッジベース
フォーラム
»
NetAdvantage Windows Forms
»
グリッドとツリー
»
【KBJ10059】UltraGridのセルの文字数をシフトJISのバイト数で設定したい
【KBJ10059】UltraGridのセルの文字数をシフトJISのバイト数で設定したい
0 ユーザーが評価
この投稿には確認済みの回答があります。 0 返信 | 1 サポーター
投稿
45
返信
[IG] 山田 達也
投稿済み: 2010/3/31 19:46
0 ユーザーが評価
【概要】
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;
}
}
}
以下に保存:
KB
前へ
|
次へ
ページ 1 / 1 (1 項目) |
RSS
インフラジスティックス ジャパン