MESCIUS MultiRow for Windows Forms 12.0J
ユーザー定義のワードラップ

MultiRowでは、文字数の指定や全角数字を1単語として認識することで、セル内のコンテンツのワードラップ位置をカスタマイズできます。
ワードラップの動作をカスタマイズするには、ICustomWordWrapProviderインターフェイスを実装するクラスを作成します。
文字数を指定したワードラップ


次のコードでは、ワードラップ位置を文字数で指定するためのICustomWordWrapProviderインターフェイスを実装するクラスを作成します。

Imports GrapeCity.Win.MultiRow

Public Class MyWordWrap
    Implements ICustomWordWrapProvider

    Public Function GetWordUnits(text As String) As System.Collections.Generic.IEnumerable(Of WordWrapUnit) Implements ICustomWordWrapProvider.GetWordUnits
        Dim list As New List(Of WordWrapUnit)()

        If text = "あいうえお、かきくけこ" Then
            list.Add(New WordWrapUnit(0, 3))
            list.Add(New WordWrapUnit(3, 8))
        End If

        Return list
    End Function
End Class
using GrapeCity.Win.MultiRow; 

public class MyWordWrap : ICustomWordWrapProvider
{
    public IEnumerable<WordWrapUnit> GetWordUnits(string text)
    {
        List<WordWrapUnit> list = new List<WordWrapUnit>();

        if (text == "あいうえお、かきくけこ")
        {
            list.Add(new WordWrapUnit(0, 3));
            list.Add(new WordWrapUnit(3, 8));
        }

        return list;
    }
}

ICustomWordWrapProviderインターフェイスを実装したクラスは、CellStyle.CustomWordWrapProviderプロパティに設定します。

GcMultiRow1(0, 0).Style.UseCompatibleTextRendering = MultiRowTriState.True
GcMultiRow1(0, 0).Style.WordWrap = MultiRowTriState.True
GcMultiRow1(0, 0).Style.Multiline = MultiRowTriState.True
GcMultiRow1(0, 0).Style.CustomWordWrapProvider = New MyWordWrap()
gcMultiRow1[0, 0].Style.UseCompatibleTextRendering = MultiRowTriState.True;
gcMultiRow1[0, 0].Style.WordWrap = MultiRowTriState.True;
gcMultiRow1[0, 0].Style.Multiline = MultiRowTriState.True;
gcMultiRow1[0, 0].Style.CustomWordWrapProvider = new MyWordWrap();
全角数字を1単語として認識させたワードラップ


次のコードでは、全角数字を1単語として認識させてワードラップさせるためのICustomWordWrapProviderインターフェイスを実装するクラスを作成します。

Imports GrapeCity.Win.MultiRow

Public Class KeepNumberTogether
    Implements ICustomWordWrapProvider

    Private Function IsFullWidthNumber([Char] As Char) As Boolean
        Return ([Char] >= "0"c AndAlso [Char] <= "9"c)
    End Function

    Public Function GetWordUnits(text As String) As System.Collections.Generic.IEnumerable(Of WordWrapUnit) Implements ICustomWordWrapProvider.GetWordUnits
        Dim list As New List(Of WordWrapUnit)()

        Dim firstNumberCharIndex As Integer = -1

        For i As Integer = 0 To text.Length - 1
            Dim currentChar As Char = text(i)

            If firstNumberCharIndex = -1 AndAlso IsFullWidthNumber(currentChar) Then
                firstNumberCharIndex = i
            ElseIf firstNumberCharIndex <> -1 Then
                If Not IsFullWidthNumber(currentChar) Then
                    list.Add(New WordWrapUnit(firstNumberCharIndex, i - firstNumberCharIndex))

                    firstNumberCharIndex = -1
                ElseIf i = text.Length - 1 Then
                    list.Add(New WordWrapUnit(firstNumberCharIndex, i - firstNumberCharIndex + 1))
                End If
            End If
        Next

        Return list

    End Function
End Class
using GrapeCity.Win.MultiRow; 

public class KeepNumberTogether : ICustomWordWrapProvider
{
    bool IsFullWidthNumber(char Char)
    {
        return (Char >= '0' && Char <= '9');
    }

    public IEnumerable<WordWrapUnit> GetWordUnits(string text)
    {
        List<WordWrapUnit> list = new List<WordWrapUnit>();

        int firstNumberCharIndex = -1;

        for (int i = 0; i < text.Length; i++)
        {
            char currentChar = text[i];

            if (firstNumberCharIndex == -1 && IsFullWidthNumber(currentChar))
            {
                firstNumberCharIndex = i;
            }
            else if (firstNumberCharIndex != -1)
            {
                if (!IsFullWidthNumber(currentChar))
                {
                    list.Add(new WordWrapUnit(firstNumberCharIndex, i - firstNumberCharIndex));

                    firstNumberCharIndex = -1;
                }
                else if (i == text.Length - 1)
                {
                    list.Add(new WordWrapUnit(firstNumberCharIndex, i - firstNumberCharIndex + 1));
                }
            }
        }

        return list;
    }
}

次のコードでは、ICustomWordWrapProviderインターフェイスを実装したクラスを設定します。

GcMultiRow1(0, 0).Style.UseCompatibleTextRendering = MultiRowTriState.True
GcMultiRow1(0, 0).Style.Multiline = MultiRowTriState.True
GcMultiRow1(0, 0).Style.WordWrap = MultiRowTriState.True
GcMultiRow1(0, 0).Style.CustomWordWrapProvider = New KeepNumberTogether()
gcMultiRow1[0, 0].Style.UseCompatibleTextRendering = MultiRowTriState.True;
gcMultiRow1[0, 0].Style.Multiline = MultiRowTriState.True;
gcMultiRow1[0, 0].Style.WordWrap = MultiRowTriState.True;
gcMultiRow1[0, 0].Style.CustomWordWrapProvider = new KeepNumberTogether();
   
関連トピック

 

 


© MESCIUS inc. All rights reserved.