0

double 配列のテーブルを作成するユーザー コントロールを作成しています。それらを描くことはできますが、値をどのように揃えるかわかりません。

例: 私のデータは次のようになります

 double[] data = new double[]
            {
                -13.5,
                -8.5,
                -3.5,
                0,
                3.5,
                8.5,
                13.5
            };

したがって、これらの値を描画するときに、それらを整列(右揃え)して、ドットがすべての値に対して正確に同じ場所に表示されるようにしたいと考えています。

私が使用しているコードは次のとおりです。

private void DrawTable()
        {
            _format.Alignment = StringAlignment.Far;
            _format.LineAlignment = StringAlignment.Far;
            int yPos = 2;
            RectangleF rect = RectangleF.Empty;
            foreach (var item in Data)
            {
                string str = item.ToString("F3");
                str = string.Format("{0}dB", str);
                str = string.Format("{0,10}",str);
                SizeF size = _gBmp.MeasureString(str, Font);
                rect.X = 5;
                rect.Y = yPos;
                rect.Width = size.Width;
                rect.Height = size.Height;
                _gBmp.DrawString(str, Font, _textBrush, rect, _format);
                yPos += 20;
            }
        }
4

3 に答える 3

0

問題は、文字列のサイズを測定して作成した長方形に各アイテムを描画していることです。

代わりに、描画する文字列ごとに同じ幅の長方形を使用する必要があります。次に、文字列を右揃えにすると、文字列が整列します (同じフォントを使用している場合)。

パディングを使用しString.Formatて文字列をパディングしないでください。これは GDI+ で行う正しい方法ではなく、主にコンソール ディスプレイのような固定幅フォント用です。文字列フォーマットを使用したい唯一のことは、小数点以下の固定数を指定することです。

列の幅を通常どおり動的にサイズ変更したい場合は、リスト内のすべての要素を測定し、測定されたすべての幅の最大幅を選択します。ただし、通常、文字列が非常に長い場合に備えて、最大幅に固定する必要があります。

于 2013-11-05T16:47:16.130 に答える
-1

十分ではなかったGridViewでしょうか..?? 整数部分は右揃えの列、小数部分は左揃えの列です。セルの境界線を非表示にし、グリッド全体を読み取り専用/無効にします...

于 2013-11-05T16:50:05.630 に答える