ワードラップの動作をカスタマイズするには、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();