GcCharMaskCellが提供する入力機能について解説します。
GcCharMaskCellは、Formatプロパティにより書式を設定することで入力可能な文字種を制限することができます。また、AutoConvertプロパティを使用して指定の書式に自動的に変換することも可能です。
GcCharMaskCellに設定可能な文字種等の詳細については、「書式の設定」で解説します。
次のサンプルコードは、入力方向を右から左に設定する例です。
Imports GrapeCity.Win.MultiRow Imports InputManCell = GrapeCity.Win.MultiRow.InputMan Dim GcCharMaskCell1 As New InputManCell.GcCharMaskCell() GcCharMaskCell1.Name = "GcCharMaskCell1" GcCharMaskCell1.InputDirection = GrapeCity.Win.Editors.CharMaskInputDirection.RightToLeft GcMultiRow1.Template = Template.CreateGridTemplate(New Cell() {GcCharMaskCell1})
using GrapeCity.Win.MultiRow; using InputManCell = GrapeCity.Win.MultiRow.InputMan; InputManCell.GcCharMaskCell gcCharMaskCell1 = new InputManCell.GcCharMaskCell(); gcCharMaskCell1.Name = "gcCharMaskCell1"; gcCharMaskCell1.InputDirection = GrapeCity.Win.Editors.CharMaskInputDirection.RightToLeft; gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcCharMaskCell1 });
AcceptsCrLfプロパティを使用してクリップボードへ改行を含む文字列をコピー、または貼り付けた場合の改行コードの扱いを設定できます。AcceptsCrLfプロパティは、CrLfMode 列挙体を使用して次の値を設定できます。
AcceptsCrLfの値 | 説明 |
---|---|
NoControl | 改行コードはそのままでコピー、貼り付けを行います。 |
Filter | 全ての改行コードを削除しコピー、貼り付けを行います。 |
Cut | 最初の改行コード以降の文字列を削除します。標準コントロールと同じ動作です。 |
Valueプロパティを使えば、リテラル文字列とプロンプト文字列を除いたセル内の文字列を取得または設定できます。たとえば、セルに「郵便番号:981-3205」が設定されているときには、Valueプロパティの値は「9813205」となります。
クリップボードにリテラル文字を含まない値を渡すには、ClipContentプロパティと GcCharMaskEditingControl.SelectedTextプロパティを使用します。ClipContentプロパティで制御できるのは、SelectedTextプロパティの値のみです。なお、プロンプト文字列は、ClipContentプロパティの設定に関わらず常にクリップボードに渡されます。
次のサンプルコードは、ClipContentプロパティを使って、リテラル文字列を省いた文字列をクリップボードにコピーする方法を示します。
Imports GrapeCity.Win.MultiRow Imports InputManCell = GrapeCity.Win.MultiRow.InputMan Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim GcCharMaskCell1 = New InputManCell.GcCharMaskCell() ' マス目をクリアします。 GcCharMaskCell1.CharBoxes.Clear() ' 書式を設定します。 GcCharMaskCell1.Format = "9" ' 郵便番号用のマス目を設定します。 GcCharMaskCell1.CharBoxes.Add(New InputManCell.LiteralBox("〒")) GcCharMaskCell1.CharBoxes.Add(New InputManCell.InputBox()) GcCharMaskCell1.CharBoxes.Add(New InputManCell.InputBox()) GcCharMaskCell1.CharBoxes.Add(New InputManCell.InputBox()) GcCharMaskCell1.CharBoxes.Add(New InputManCell.SeparatorBox()) GcCharMaskCell1.CharBoxes.Add(New InputManCell.InputBox()) GcCharMaskCell1.CharBoxes.Add(New InputManCell.InputBox()) GcCharMaskCell1.CharBoxes.Add(New InputManCell.InputBox()) GcCharMaskCell1.CharBoxes.Add(New InputManCell.InputBox()) GcCharMaskCell1.Value = "9813205" GcCharMaskCell1.ClipContent = GrapeCity.Win.Editors.ClipContent.ExcludeLiterals Dim TextBoxCell1 As New TextBoxCell() ' MultiRowのテンプレートを設定します。 GcMultiRow1.Template = Template.CreateGridTemplate(New Cell() {GcCharMaskCell1, TextBoxCell1}) GcMultiRow1.RowCount = 5 End Sub Private Sub GcMultiRow1_EditingControlShowing(sender As Object, e As EditingControlShowingEventArgs) Handles GcMultiRow1.EditingControlShowing If TypeOf e.Control Is InputManCell.GcCharMaskEditingControl Then ' GcCharMaskCellの編集用コントロールが表示された場合にKeyDownイベントを設定します。 RemoveHandler e.Control.KeyDown, AddressOf Editor_KeyDown AddHandler e.Control.KeyDown, AddressOf Editor_KeyDown End If End Sub Private Sub Editor_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Dim cell As Cell = GcMultiRow1.CurrentCell If e.KeyCode = Keys.F5 Then Dim editor As InputManCell.GcCharMaskEditingControl = DirectCast(sender, InputManCell.GcCharMaskEditingControl) ' クリップボードにコピーします。 editor.SelectionStart = 0 editor.SelectionLength = editor.Text.Length Clipboard.SetDataObject(editor.SelectedText) ' クリップボードのデータを取得して確認します。 Dim cbData As IDataObject = Clipboard.GetDataObject() GcMultiRow1(cell.RowIndex, cell.CellIndex + 1).Value = cbData.GetData(DataFormats.Text).ToString() End If End Sub
using GrapeCity.Win.MultiRow; using InputManCell = GrapeCity.Win.MultiRow.InputMan; private void Form1_Load(object sender, EventArgs e) { InputManCell.GcCharMaskCell gcCharMaskCell1 = new InputManCell.GcCharMaskCell(); // マス目をクリアします。 gcCharMaskCell1.CharBoxes.Clear(); // 書式を設定します。 gcCharMaskCell1.Format = "9"; // 郵便番号用のマス目を設定します。 gcCharMaskCell1.CharBoxes.Add(new InputManCell.LiteralBox("〒")); gcCharMaskCell1.CharBoxes.Add(new InputManCell.InputBox()); gcCharMaskCell1.CharBoxes.Add(new InputManCell.InputBox()); gcCharMaskCell1.CharBoxes.Add(new InputManCell.InputBox()); gcCharMaskCell1.CharBoxes.Add(new InputManCell.SeparatorBox()); gcCharMaskCell1.CharBoxes.Add(new InputManCell.InputBox()); gcCharMaskCell1.CharBoxes.Add(new InputManCell.InputBox()); gcCharMaskCell1.CharBoxes.Add(new InputManCell.InputBox()); gcCharMaskCell1.CharBoxes.Add(new InputManCell.InputBox()); gcCharMaskCell1.Value = "9813205"; gcCharMaskCell1.ClipContent = GrapeCity.Win.Editors.ClipContent.ExcludeLiterals; TextBoxCell textBoxCell1 = new TextBoxCell(); // MultiRowのテンプレートを設定します。 gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcCharMaskCell1, textBoxCell1 }); gcMultiRow1.RowCount = 5; gcMultiRow1.EditingControlShowing += new EventHandler<EditingControlShowingEventArgs>(gcMultiRow1_EditingControlShowing); } private void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e) { if (e.Control is InputManCell.GcCharMaskEditingControl) { // GcCharMaskCellの編集用コントロールが表示された場合にKeyDownイベントを設定します。 e.Control.KeyDown -= new KeyEventHandler(Editor_KeyDown); e.Control.KeyDown += new KeyEventHandler(Editor_KeyDown); } } private void Editor_KeyDown(object sender, KeyEventArgs e) { Cell cell = gcMultiRow1.CurrentCell; if (e.KeyCode == Keys.F5) { InputManCell.GcCharMaskEditingControl editor = (InputManCell.GcCharMaskEditingControl)sender; // クリップボードにコピーします。 editor.SelectionStart = 0; editor.SelectionLength = editor.Text.Length; Clipboard.SetDataObject(editor.SelectedText); // クリップボードのデータを取得して確認します。 IDataObject cbData = Clipboard.GetDataObject(); gcMultiRow1[cell.RowIndex, cell.CellIndex + 1].Value = cbData.GetData(DataFormats.Text).ToString(); } }
ExitOnLastCharプロパティをTrueに設定すると、入力された文字列が、CharBoxesプロパティで設定した最大文字数に達したときに、自動的に次のコントロールへフォーカスを移動できます。