基本操作 > 編集機能 > セル編集時の改行を許可する |
デフォルトではセル編集時に [Alt]+[Enter]、または [Ctrl]+[Enter]、または [Shift]+[Enter]、[Ctrl]+[J]、[Ctrl]+[Shift]+[J])で、テキストを改行することができます。この動作を制御する必要がある場合は、下記のように、CellFactory クラスをオーバーライドしたカスタムセルファクトリを使用してセル上の動作をカスタマイズできます。
コードのコピー
|
|
---|---|
Public Sub New() InitializeComponent() C1FlexGrid.ItemsSource = Product.GetProducts(10) ' カスタムセルファクトリを作成します C1FlexGrid.CellFactory = New CustomerCellFactory() End Sub Public Class CustomerCellFactory Inherits CellFactory Public Overrides Function CreateCellEditor(grid As C1FlexGrid, cellType As CellType, rng As CellRange) As FrameworkElement Dim control = MyBase.CreateCellEditor(grid, cellType, rng) Dim bdr = TryCast(control, Border) Dim tb = TryCast(bdr.Child, TextBox) AddHandler tb.PreviewKeyUp, AddressOf tb_PreviewKeyUp Return control End Function Private Sub tb_PreviewKeyUp(sender As Object, e As KeyEventArgs) '左側の[Ctrl]+[Enter]キーを押下すると、改行を許可します If e.Key = Key.Enter AndAlso Keyboard.IsKeyDown(Key.LeftCtrl) Then Dim tb = TryCast(sender, TextBox) tb.TextWrapping = TextWrapping.Wrap If tb IsNot Nothing Then Dim linebreak As String = vbCr & vbLf Dim start = tb.SelectionStart Dim text1 = tb.Text.Substring(0, tb.SelectionStart) Dim text2 = tb.Text.Substring(tb.SelectionStart) Dim sb As New StringBuilder() Dim newText = sb.Append(text1).Append(linebreak).Append(text2).ToString() start = start + linebreak.Length tb.Text = newText tb.SelectionStart = start End If e.Handled = True End If End Sub End Class |
コードのコピー
|
|
---|---|
public MultilineEditor() { InitializeComponent(); C1FlexGrid.ItemsSource = Product.GetProducts(10); // カスタムセルファクトリを作成します C1FlexGrid.CellFactory = new CustomerCellFactory(); } public class CustomerCellFactory : CellFactory { public override FrameworkElement CreateCellEditor(C1FlexGrid grid, CellType cellType, CellRange rng) { var control = base.CreateCellEditor(grid, cellType, rng); var bdr = control as Border; var tb = bdr.Child as TextBox; tb.PreviewKeyUp += tb_PreviewKeyUp; return control; } void tb_PreviewKeyUp(object sender, KeyEventArgs e) { //左側の[Ctrl]+[Enter]キーを押下すると、改行を許可します if (e.Key == Key.Enter && Keyboard.IsKeyDown(Key.LeftCtrl)) { var tb = sender as TextBox; tb.TextWrapping = TextWrapping.Wrap; if (tb != null) { string linebreak = "\r\n"; var start = tb.SelectionStart; var text1 = tb.Text.Substring(0, tb.SelectionStart); var text2 = tb.Text.Substring(tb.SelectionStart); StringBuilder sb = new StringBuilder(); var newText = sb.Append(text1).Append(linebreak).Append(text2).ToString(); start = start + linebreak.Length; tb.Text = newText; tb.SelectionStart = start; } e.Handled = true; } } } |