小数点の位置を固定した状態で TextBoxコントロールに数値を表示するには?

文書番号 : 37869     文書種別 : 技術情報     登録日 : 2015/11/18     最終更新日 : 2015/11/18
文書を印刷する
対象製品
ActiveReports for .NET 9.0J
詳細
小数点以下の値を持つ数値を TextBoxコントロールに表示する際に、整数部や小数部の桁数が異なっても、常に同じ位置に小数点を表示したい場合には、PadLeftメソッドを使用して、値の前に空白を出力して出力位置を調整する方法が考えられます。

具体的な方法は、レポートの形式によって異なります。

なお、いずれの形式についても、当該コントロールのフォントにはプロポーショナルフォントではなく、固定ピッチフォント(等幅フォント)を設定する必要があります。あらかじめご注意ください。
  1. セクションレポートの場合
  2. ページレポート/RDLレポートの場合


セクションレポートの場合

セクションレポートの場合、コントロールを配置したセクションのFormatイベントに、文字列を編集する処理を追加します。たとえば、以下のようなコードになります。

◆サンプルコード(VB.NET)
Private Sub Detail_Format(...) Handles Detail.Format
  Me.TextBox1.Text = PaddingSpace(Me.TextBox1.Text)
End Sub

' 整数部の桁数を9桁に設定します。
Private Function PaddingSpace(ByVal s As String) As String
  Dim ret As String = ""

  ' 文字列内の小数点の位置を取得します。
  Dim i As Integer = s.IndexOf(".")

  ' 文字列を編集します。
  If i > -1 Then
    ' 【文字列内に小数点が存在する場合】
    ' 整数部と小数部の文字列をそれぞれ取得します。

    Dim strInteger As String = s.Substring(0, i)
    Dim strDecimal As String = s.Substring(i)

    ' PadLeftメソッドで整数部の文字列長を固定し、小数部と結合します。
    ret = strInteger.PadLeft(9, " ") + strDecimal
  Else
    ' 【文字列内に小数点が存在しない場合】
    ' PadLeftメソッドで文字列長を固定します。

    ret = s.PadLeft(9, " ")
  End If

  ' 編集結果を返します。
  Return ret
End Function

◆サンプルコード(C#)
private void Detail_Format(object sender, EventArgs e)
{
  this.TextBox1.Text = PaddingSpace(this.TextBox1.Text);
}

// 整数部の桁数を9桁に設定します。
private string PaddingSpace(string s)
{
  string ret = "";

  // 文字列内の小数点の位置を取得します。
  int i = s.IndexOf(".");

  // 文字列を編集します。
  if (i > -1)
  {
    // 【文字列内に小数点が存在する場合】
    // 整数部と小数部の文字列をそれぞれ取得します。

    string strInteger = s.Substring(0, i);
    string strDecimal = s.Substring(i);

    // PadLeftメソッドで整数部の文字列長を固定し、小数部と結合します。
    ret = strInteger.PadLeft(9, ' ') + strDecimal;
  }
  else
  {
    // 【文字列内に小数点が存在しない場合】
    // PadLeftメソッドで文字列長を固定します。

    ret = s.PadLeft(9, ' ');
  }

  // 編集結果を返します。
  return ret;
}



ページレポート/RDLレポートの場合

ページレポート/RDLレポートの場合、文字列を編集する処理をスクリプトとして記述し、それをTextBoxコントロールのValueプロパティから「式」として呼び出します。

たとえば、以下のような手順になります。
  1. 文字列を編集するメソッドをスクリプトとして記述します。
    レポートのデザイナ画面からスクリプトタブを開き、以下のコードを記述します。

    ◆サンプルコード
    ' 整数部の桁数を9桁に設定します。
    Public Function PaddingSpace(ByVal s As String) As String
      Dim ret As String = ""

      ' 文字列内の小数点の位置を取得します。
      Dim i As Integer = s.IndexOf(".")

      ' 文字列を編集します。
      If i > -1 Then
        ' 【文字列内に小数点が存在する場合】
        ' 整数部と小数部の文字列をそれぞれ取得します。

        Dim strInteger As String = s.Substring(0, i)
        Dim strDecimal As String = s.Substring(i)

        ' PadLeftメソッドで整数部の文字列長を固定し、小数部と結合します。
        ret = strInteger.PadLeft(9, " ") + strDecimal
      Else
        ' 【文字列内に小数点が存在しない場合】
        ' PadLeftメソッドで文字列長を固定します。

        ret = s.PadLeft(9, " ")
      End If

      ' 編集結果を返します。
      Return ret
    End Function

    ページレポート/RDLレポートのスクリプトは、VB.NET形式でしか記述できません。これは、プロジェクト自体がC#であっても同様です。

  2. TextBoxコントロールのValueプロパティに「式」を設定します。
    適用したいTextBoxコントロールのValueプロパティに以下のような式を設定します。

    ◆式
    =Code.PaddingSpace(Fields!FieldName.Value)


    なお、この場合、Fields!FieldName.Valueの値は自動的に文字列に変換されます。そのため、Formatプロパティによる書式設定は適用されません。書式を設定したい場合には、以下のようにToStringメソッドを使用してください。

    ◆式
    =Code.PaddingSpace(Fields!FieldName.Value.ToString("0.000"))

ページレポート/RDLレポートにおけるスクリプトの詳細については、製品ヘルプの以下のトピックをご覧ください。

ActiveReportsユーザーガイド
 - 概念
  - ページレポート/RDLレポートの概念
   - スクリプトの使用
 - サンプルとチュートリアル
  - チュートリアル
   - ページレポート/RDLレポートのチュートリアル
    - カスタマイズ
     - カスタムコードを使用するレポートの作成
関連情報
キーワード
HowTo デザイン・レイアウト