GrapeCity MultiRow for Windows Forms 11.0J
入力の制御

GcCharMaskCellが提供する入力機能について解説します。

書式の設定

GcCharMaskCellは、Formatプロパティにより書式を設定することで入力可能な文字種を制限することができます。また、AutoConvertプロパティを使用して指定の書式に自動的に変換することも可能です。

GcCharMaskCellに設定可能な文字種等の詳細については、「書式の設定」で解説します。

入力方向の設定
GcCharMaskCell では、InputDirectionプロパティを使って、テキストの入力方向を設定することができます。セルへの入力内容に応じてテキストの入力方向を設定することで、自然な入力を実現することができます。
たとえば、文字列や番号のような入力の場合、CharMaskInputDirection.LeftToRight(左から右へ)、数値や金額などを入力する場合はCharMaskInputDirection.RightToLeft(右から左へ)のように設定することができます。

次のサンプルコードは、入力方向を右から左に設定する例です。

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プロパティで設定した最大文字数に達したときに、自動的に次のコントロールへフォーカスを移動できます。

関連トピック

 

 


© 2008 GrapeCity inc. All rights reserved.