.NET2005 XPhome
4つの文字列を、値によって表示形式を変えたいのですが標準の機能を探したのですがなさそうでした。
そこで、書式を追加できないかと色々探したのですができるような
できないような、これ!というサンプルも見つけられませんでした。
文字列"xxxx"を16進とし、C000とANDをとります。
0000ならヘッダを"A"
4000なら"B"、8000なら"C"、C000なら"D"
次に、"xxxx"を同様に16進とし3FFFのANDを16進の4文字とします。
例えば、"9123"は"C1123"と表示させたいです。
"FFFF"は"D3FFF"と表示させたいです。
Gridにデータを表示しており、数字以外の場合の文字列は
IDictionaryを使用したりして数値で文字を表示できるところまでこぎつけました。
この表示形式のデータだけ文字列として扱うのが悔しいので
良いアドバイスがあったらよろしくお願いします
組み合わせだけみれば、64K個しかなさそうなので、
Generic.Dictionary(Of String, String) で変換テーブルを
作っておいて、それで処理するのが高速かも知れません。
もし、計算として出すのであれば、
Dim Source As String '← "FFFF" とか "9123" とか
Dim UI As UInteger = UInteger.Parse(Source, NumberStyles.AllowHexSpecifier)
Return "ABCD"(UI >> 14) & (UI And &H3FFF).ToString("X4")
のようにしてみれば、期待する結果になるのでは、と。
でもって、.ToSting() や String.Format() などで指定可能な書式として
作成する、という意味なら、IFormatProvider の実装が必要になるという事で。
魔界の仮面弁士さま回答ありがとうございます。
予めデータを抜き取る位置は判っているので計算をさせようとすればできます。
よって、後者のIFormatProviderがそうなのかもです。
先ほどからヘルプとにらめっこしているのですが
サンプルもチンプンカンプンでして・・・
もう少し粘ってみます。
MSDN...さっぱり理解できませんでした。
関連項目内でループループの堂々巡りです。
対象はGrapeCityのFlexGrid.NET3.0J(現在評価中で体験版)でし。
CellStyle.Format = "0.0"
のように設定したいです。
"0.0"の部分を"ABCD"のようにすれば
"FFFF"(65535)はD3FFFと表示してほしいのですが
なんかサンプル「Format 関数, ユーザー定義の数値」
ではそのような設定ができませんでした。
いまいち.NETを理解し切れていないのも原因ですが
引き続き、ヒントなどありましたらよろしくお願いします。
時間かかりましたが、おかげさまで解決いたしました。
ツイート | ![]() |