ワードラップ(自動改行、禁則処理)を無効にして改行を行う方法はありますか?
対象製品
ActiveReports for .NET 6.0J Standard
詳細
ActiveReports には、ワードラップを無効にして改行を行う機能は用意されておりません。
しかしながら、下記のように改行コードを、出力するデータに含めることにより、任意の箇所で改行を行なうことが可能です。こちらを参考にお試しください。
◆サンプルコード(VB.NET)
◆サンプルコード(C#)
なお、この方法を用いる場合、当該コントロールのフォントにはプロポーショナルフォントではなく、固定ピッチフォント(等幅フォント)を設定してください。
しかしながら、下記のように改行コードを、出力するデータに含めることにより、任意の箇所で改行を行なうことが可能です。こちらを参考にお試しください。
◆サンプルコード(VB.NET)
Private Sub Detail_Format(...) Handles Detail.Format
' ワードラップを無効にします。
Me.TextBox1.WordWrap = False
' 20バイト(全角10文字)毎に改行コードを挿入します。
Me.TextBox1.Text = InsertCrLf(Me.TextBox1.Text, 20)
End Sub
Private Function InsertCrLf(ByVal strData As String, ByVal intBytes As Integer) As String
Dim cnt As Integer = 0 ' 1行あたりの文字列バイト数
Dim tmpCnt As Integer = 0 ' 1文字のバイト数
Dim wk As String ' チェック用作業領域
' 編集結果の格納領域
Dim MyStringBuilder As New System.Text.StringBuilder
For i As Integer = 0 To strData.Length - 1
' 1文字ずつ切り出します。
wk = strData.Substring(i, 1)
' Shift_JISエンコーディングでの文字列バイト数をカウントします。
tmpCnt = System.Text.Encoding.GetEncoding("shift-jis").GetByteCount(wk)
' 切り出した文字を結合した後のバイト数に応じて「改行」を挿入します。
If (cnt + tmpCnt = intBytes) Then
' (指定したバイト数に一致する場合)
' 結合後に改行を挿入します。
MyStringBuilder.Append(wk)
MyStringBuilder.Append(Environment.NewLine)
cnt = 0
ElseIf (cnt + tmpCnt > intBytes) Then
' (指定したバイト数を超える場合)
' 改行を挿入した後に結合します。
MyStringBuilder.Append(Environment.NewLine)
MyStringBuilder.Append(wk)
cnt = tmpCnt
Else
' (指定したバイト数未満の場合)
' 切り出した文字を結合します。
MyStringBuilder.Append(wk)
cnt = cnt + tmpCnt
End If
Next i
Return MyStringBuilder.ToString
End Function
' ワードラップを無効にします。
Me.TextBox1.WordWrap = False
' 20バイト(全角10文字)毎に改行コードを挿入します。
Me.TextBox1.Text = InsertCrLf(Me.TextBox1.Text, 20)
End Sub
Private Function InsertCrLf(ByVal strData As String, ByVal intBytes As Integer) As String
Dim cnt As Integer = 0 ' 1行あたりの文字列バイト数
Dim tmpCnt As Integer = 0 ' 1文字のバイト数
Dim wk As String ' チェック用作業領域
' 編集結果の格納領域
Dim MyStringBuilder As New System.Text.StringBuilder
For i As Integer = 0 To strData.Length - 1
' 1文字ずつ切り出します。
wk = strData.Substring(i, 1)
' Shift_JISエンコーディングでの文字列バイト数をカウントします。
tmpCnt = System.Text.Encoding.GetEncoding("shift-jis").GetByteCount(wk)
' 切り出した文字を結合した後のバイト数に応じて「改行」を挿入します。
If (cnt + tmpCnt = intBytes) Then
' (指定したバイト数に一致する場合)
' 結合後に改行を挿入します。
MyStringBuilder.Append(wk)
MyStringBuilder.Append(Environment.NewLine)
cnt = 0
ElseIf (cnt + tmpCnt > intBytes) Then
' (指定したバイト数を超える場合)
' 改行を挿入した後に結合します。
MyStringBuilder.Append(Environment.NewLine)
MyStringBuilder.Append(wk)
cnt = tmpCnt
Else
' (指定したバイト数未満の場合)
' 切り出した文字を結合します。
MyStringBuilder.Append(wk)
cnt = cnt + tmpCnt
End If
Next i
Return MyStringBuilder.ToString
End Function
◆サンプルコード(C#)
private void detail_Format(object sender, EventArgs e)
{
// ワードラップを無効にします。
this.textBox1.WordWrap = false;
// 20バイト(全角10文字)毎に改行コードを挿入します。
this.textBox1.Text = InsertCrLf(this.textBox1.Text, 20);
}
private string InsertCrLf(string strData, int intBytes)
{
int cnt = 0; // 1行あたりの文字列バイト数
int tmpCnt = 0; // 1文字のバイト数
string wk ; // チェック用作業領域
// 編集結果の格納領域
System.Text.StringBuilder MyStringBuilder = new System.Text.StringBuilder();
for (int i = 0; i < (strData.Length); i++)
{
// 1文字ずつ切り出します。
wk = strData.Substring(i, 1);
// Shift_JISエンコーディングでの文字列バイト数をカウントします。
tmpCnt = System.Text.Encoding.GetEncoding("shift-jis").GetByteCount(wk);
// 切り出した文字を結合した後のバイト数に応じて「改行」を挿入します。
if (cnt + tmpCnt == intBytes)
{
// (指定したバイト数に一致する場合)
// 結合後に改行を挿入します。
MyStringBuilder.Append(wk);
MyStringBuilder.Append(Environment.NewLine);
cnt = 0;
}
else if (cnt + tmpCnt > intBytes)
{
// (指定したバイト数を超える場合)
// 改行を挿入した後に結合します。
MyStringBuilder.Append(Environment.NewLine);
MyStringBuilder.Append(wk);
cnt = tmpCnt;
}
else
{
// (指定したバイト数未満の場合)
// 切り出した文字を結合します。
MyStringBuilder.Append(wk);
cnt = cnt + tmpCnt;
}
}
return MyStringBuilder.ToString();
}
{
// ワードラップを無効にします。
this.textBox1.WordWrap = false;
// 20バイト(全角10文字)毎に改行コードを挿入します。
this.textBox1.Text = InsertCrLf(this.textBox1.Text, 20);
}
private string InsertCrLf(string strData, int intBytes)
{
int cnt = 0; // 1行あたりの文字列バイト数
int tmpCnt = 0; // 1文字のバイト数
string wk ; // チェック用作業領域
// 編集結果の格納領域
System.Text.StringBuilder MyStringBuilder = new System.Text.StringBuilder();
for (int i = 0; i < (strData.Length); i++)
{
// 1文字ずつ切り出します。
wk = strData.Substring(i, 1);
// Shift_JISエンコーディングでの文字列バイト数をカウントします。
tmpCnt = System.Text.Encoding.GetEncoding("shift-jis").GetByteCount(wk);
// 切り出した文字を結合した後のバイト数に応じて「改行」を挿入します。
if (cnt + tmpCnt == intBytes)
{
// (指定したバイト数に一致する場合)
// 結合後に改行を挿入します。
MyStringBuilder.Append(wk);
MyStringBuilder.Append(Environment.NewLine);
cnt = 0;
}
else if (cnt + tmpCnt > intBytes)
{
// (指定したバイト数を超える場合)
// 改行を挿入した後に結合します。
MyStringBuilder.Append(Environment.NewLine);
MyStringBuilder.Append(wk);
cnt = tmpCnt;
}
else
{
// (指定したバイト数未満の場合)
// 切り出した文字を結合します。
MyStringBuilder.Append(wk);
cnt = cnt + tmpCnt;
}
}
return MyStringBuilder.ToString();
}
なお、この方法を用いる場合、当該コントロールのフォントにはプロポーショナルフォントではなく、固定ピッチフォント(等幅フォント)を設定してください。
関連情報
キーワード
HowTo デザイン・レイアウト
この文書は、以前は次のFAQ IDで公開されていました : 12072