PowerTools MultiRow for Windows Forms 8.0J
入力の制御

GcMaskCellではマスク書式の設定やパスワード入力が可能です。ここではGcMaskCellが提供する入力機能について解説します。

書式の設定
GcMaskCellでは正規表現による書式設定が可能です。書式の設定はFieldsプロパティによって行われ、フィールドとよばれる入力領域を構成する要素によって定義されます。Fieldsプロパティの詳細や書式の設定方法については、「書式の設定」で詳しく解説します。
改行コードの取り扱い
AcceptsCrLfプロパティを使用してクリップボードへ改行を含む文字列をコピー、または貼り付けた場合の改行コードの扱いを設定できます。AcceptsCrLfプロパティは、CrLfMode 列挙体を使用して次の値を設定できます。
AcceptsCrLfの値 説明
NoControl 改行コードはそのままでコピー、貼り付けを行います。
Filter 全ての改行コードを削除しコピー、貼り付けを行います。
Cut 最初の改行コード以降の文字列を削除します。標準コントロールと同じ動作です。
タブ文字の取り扱い
AcceptsTabCharプロパティを使用してクリップボードへタブ文字を含む文字列をコピー、または貼り付けた場合のタブ文字の扱いを設定できます。AcceptsTabCharプロパティは、TabCharMode 列挙体を使用して次の値を設定できます。
AcceptsTabCharの値 説明
NoControl タブ文字はそのままでコピー、貼り付けを行います。
Filter 全てのタブ文字を削除しコピー、貼り付けを行います。
Cut 最初のタブ文字以降の文字列を削除します。
値の取得と設定

Valueプロパティを使えば、リテラル文字とプロンプト文字を除いたセル内の文字列を取得または設定できます。たとえば、セルに「郵便番号:981-3205」が設定されているときには、Valueプロパティの値は「9813205」となります。

リテラル文字とプロンプト文字については「書式の設定」で解説しています。


クリップボードにリテラル文字を含まない値を渡すには、ClipContentプロパティとGcMaskEditingControl.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 GcMaskCell1 = New InputManCell.GcMaskCell()
    GcMaskCell1.Fields.AddRange("郵便番号:\D{3}-\D{4}")
    GcMaskCell1.Value = "9813205"
    GcMaskCell1.ClipContent = GrapeCity.Win.Editors.ClipContent.ExcludeLiterals

    Dim TextBoxCell1 As New TextBoxCell()

    ' MultiRowのテンプレートを設定します。 
    GcMultiRow1.Template = Template.CreateGridTemplate(New Cell() {GcMaskCell1, 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.GcMaskEditingControl Then
        ' GcMaskCellの編集用コントロールが表示された場合に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.GcMaskEditingControl = DirectCast(sender, InputManCell.GcMaskEditingControl)

        ' クリップボードにコピーします。 
        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.GcMaskCell gcMaskCell1 = new InputManCell.GcMaskCell();
    gcMaskCell1.Fields.AddRange("郵便番号:\\D{3}-\\D{4}");
    gcMaskCell1.Value = "9813205";
    gcMaskCell1.ClipContent = GrapeCity.Win.Editors.ClipContent.ExcludeLiterals;

    TextBoxCell textBoxCell1 = new TextBoxCell();

    // MultiRowのテンプレートを設定します。
    gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcMaskCell1, textBoxCell1 });
    gcMultiRow1.RowCount = 5;

    gcMultiRow1.EditingControlShowing += new EventHandler<EditingControlShowingEventArgs>(gcMultiRow1_EditingControlShowing);
}

private void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e)
{
    if (e.Control is InputManCell.GcMaskEditingControl)
    {
        // GcMaskCellの編集用コントロールが表示された場合に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.GcMaskEditingControl editor = (InputManCell.GcMaskEditingControl)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();
    }
}
パスワード入力

書式の設定で、パターンフィールド(MaskPatternFieldクラス)にパスワードを設定することができます。 MaskPatternFieldオブジェクトに以下のいずれかの設定を行うと、特定のフィールドをパスワード入力専用にできます。

フィールドの設定については、「書式の設定」を参照してください。

また、GcMaskCellのPasswordRevelationModeプロパティを使用すると入力中のパスワード文字列を一時的に表示することが可能です。PasswordRevelationModeプロパティに設定可能な値は以下のとおりです。

PasswordRevelationMode の値 説明
None パスワード文字列を表示しません。
ShowEyeButton パスワードを入力すると、コントロールの右端に目のアイコンが表示されこのアイコンのクリックでパスワード文字列を表示します。

ShowLastTypeChar 最後に入力した文字だけ数秒間表示します。

イベントを使った文字列操作
セルに文字列を入力すると GcMaskEditingControl.TextChangingイベントが、GcMaskEditingControl.TextChangedイベントの前(入力された文字列がText プロパティに渡される前)に発生します。このイベント内で入力文字列をチェックすれば、Textプロパティの値に影響を与えることなく、入力を制御できます。
自動フォーカス移動

ExitOnLastCharプロパティをTrueに設定すると、入力された文字列が、 書式設定により定義されたフィールドすべてに満たされると、自動的に次のコントロールへフォーカスを移動できます。

フィールド間の移動

GcMaskCellの表示領域は、通常、リテラル文字列と入力フィールドの2種類に分かれています。フィールドについては「書式の設定」を参照してください。

TabActionプロパティをTabAction.Controlに設定すると、[Tab]キーまたは[Shift]+[Tab]キーによるフォーカス移動は、セル間で行われます。TabAction.Fieldに設定すると、フォーカス移動は入力フィールド間で行われます。また、GcMaskCellのナビゲーションや選択などの操作は、リテラル文字列と入力フィールドの位置関係による影響を受けます。

参照

 

 


© 2008-2015 GrapeCity inc. All rights reserved.