GrapeCity InputMan for Windows Forms 11.0J
社員情報入力

氏名や住所など、基本的なユーザー情報の入力画面には、自動入力、フォーカス移動、エラーチェックなどのInputManの機能を活用できます。ここでは製品サンプルに収録している「社員情報入力」画面の実装を解説します。

ソースコードは実装サンプルの「15_Sample.RegistEmployee」を参照ください。

コントロールの配置

必要なコントロールをツールボックスより配置します。このサンプルでは、以下のコントロールを配置しています。コントロール配置の詳細な方法については「コンポーネントをプロジェクトに組み込む」で解説しています。

名称 コントロール 主な操作
社員番号 数値コントロール 6桁の数値のみ入力する
社員名 テキストコントロール 全角60文字までの全角文字を入力する
フリガナ テキストコントロール 漢字に入力された文字のフリガナを自動表示する
生年月日 日付コントロール 実在する過去の年月日を和暦入力する
電話番号 マスクコントロール 電話番号の形式に沿った入力をする
郵便番号 郵便番号コントロール 実在する郵便番号を入力する
住所 住所コントロール 郵便番号に入力された郵便番号に対応する住所を自動表示する
内線 マスクコントロール 内線の形式に沿った入力をする
部署名 コンボコントロール 実在する部課を選択する
通信欄 テキストコントロール 5行以内にまとめた必要事項を入力する
社員番号の設定

特定の桁数でゼロパディングを行う場合は、「キーワードによる書式設定」のFieldsプロパティやDisplayFieldsプロパティを設定します。

以下の例では6桁のゼロパディングを設定しています。

GcNumber1.DisplayFields.Clear()
GcNumber1.Fields.SetFields("000000,,,,")
GcNumber1.DisplayFields.AddRange("000000,,,,")
GcNumber1.ContentAlignment = System.Drawing.ContentAlignment.MiddleLeft
gcNumber1.DisplayFields.Clear();
gcNumber1.Fields.SetFields("000000,,,,");
gcNumber1.DisplayFields.AddRange("000000,,,,");
gcNumber1.ContentAlignment = System.Drawing.ContentAlignment.MiddleLeft;
社員名の設定

入力可能文字数の「入力の制御」を行う場合は、MaxLengthプロパティとMaxLengthUnitプロパティを設定します。また、全角のみ入力したい場合など「書式の設定」を行う場合は、Formatプロパティを設定します。

以下の例では、60文字の制限、入力を全角のみに制限、AllowApaceプロパティによりスペースの入力を禁止にしています。

GcTextBox1.MaxLength = 60
GcTextBox1.MaxLengthUnit = GrapeCity.Win.Editors.LengthUnit.Char
GcTextBox1.Format = "Z"
GcTextBox1.AllowSpace = GrapeCity.Win.Editors.AllowSpace.None
GcTextBox1.AlternateText.DisplayNull.Text = "全角文字を入力できます。"
GcTextBox1.AlternateText.DisplayNull.ForeColor = Drawing.Color.Gray
GcIme1.SetInputScope(GcTextBox1, InputScopeNameValue.Hiragana)
gcTextBox1.MaxLength = 60;
gcTextBox1.MaxLengthUnit = GrapeCity.Win.Editors.LengthUnit.Char;
gcTextBox1.Format = "Z";
gcTextBox1.AllowSpace = GrapeCity.Win.Editors.AllowSpace.None;
gcTextBox1.AlternateText.DisplayNull.Text = "全角文字を入力できます。";
gcTextBox1.AlternateText.DisplayNull.ForeColor = Color.Gray;
gcIme1.SetInputScope(gcTextBox1, InputScopeNameValue.Hiragana);
フリガナの設定

社員名で入力した内容の「ふりがなの取得」を行う場合は、SetReadingStringOutPutメソッドを利用します。

以下の例では、社員名の入力からフリガナを自動設定し、入力をカタカナに制限しています。

GcTextBox2.Format = "K"
GcTextBox2.AlternateText.DisplayNull.Text = "カタカナを入力できます。"
GcTextBox2.AlternateText.DisplayNull.ForeColor = Color.Gray
GcTextBox2.AllowSpace = GrapeCity.Win.Editors.AllowSpace.None
GcIme1.SetReadingStringOutput(GcTextBox1, New ReadingStringOutput(GcTextBox2, ReadingStringOutputMode.Append))
GcIme1.SetInputScope(GcTextBox2, InputScopeNameValue.KatakanaFullWidth)
gcTextBox2.Format = "K";
gcTextBox2.AlternateText.DisplayNull.Text = "カタカナを入力できます。";
gcTextBox2.AlternateText.DisplayNull.ForeColor = Color.Gray;
gcTextBox2.AllowSpace = GrapeCity.Win.Editors.AllowSpace.None;
gcIme1.SetReadingStringOutput(gcTextBox1, new ReadingStringOutput(gcTextBox2, ReadingStringOutputMode.Append));
gcIme1.SetInputScope(gcTextBox2, InputScopeNameValue.KatakanaFullWidth);
郵便番号の設定

郵便番号の入力には郵便番号コントロールを用います。

以下の例では、レイアウトをFieldsプロパティで設定し、SplitAreaDetailsプロパティやAutoCompleteModeプロパティの郵便番号の入力補助の機能を有効にしています。

GcPostal1.Fields.ZipCodePrefix.Text = "〒"
GcPostal1.SplitAreaDetails = True
GcPostal1.AutoCompleteMode = AutoCompleteMode.SuggestAppend
gcPostal1.Fields.ZipCodePrefix.Text = "〒";
gcPostal1.SplitAreaDetails = true;
gcPostal1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
住所の設定

住所の入力には「住所コントロール」を用います。

以下の例では、住所の手入力の他に「住所検索コンポーネント」を利用し、郵便番号の入力に対応した住所情報の取得を行っています。

GcAddressBox1.AutoFilter = True
Dim addressOutputSetting1 As AddressOutputSetting = New AddressOutputSetting With {
    .AddressOutput = GcAddressBox1
}
GcAddress1.SetAddressOutputSetting(GcPostal1, addressOutputSetting1)
gcAddressBox1.AutoFilter = true;
var addressOutputSetting1 = new AddressOutputSetting()
{
    AddressOutput = gcAddressBox1
};
gcAddress1.SetAddressOutputSetting(gcPostal1, addressOutputSetting1);
電話番号や内線の設定

電話番号や内線の入力文字数やハイフンなどの表示はフィールドオブジェクトによる書式設定MaskLiteralFieldプロパティやMaskPatternFieldプロパティを設定します。

以下の例では、入力文字数に制限を設け、ハイフンなどのリテラル文字を設定しています。

GcMask1.Fields.AddRange(New MaskField() {
        New MaskLiteralField(" "),
        New MaskPatternField("\D", 3, 4),
        New MaskLiteralField("-"),
        New MaskPatternField("\D", 3, 4),
        New MaskLiteralField("-"),
        New MaskPatternField("\D", 4, 4)})
gcMask1.Fields.AddRange(new MaskField[] {
        new MaskLiteralField(" ")
        , new MaskPatternField("\\D", 3, 4)
        , new MaskLiteralField("-")
        , new MaskPatternField("\\D", 3, 4)
        , new MaskLiteralField("-")
        , new MaskPatternField("\\D", 4, 4)
    });
生年月日の設定

未来日の入力を制限するような入力範囲の指定を行う場合は、日付検証コンポーネントを用います。GcDateValidator.InvalidRangeクラスのMaxValueプロパティおよびMinValueプロパティで、最大日付および最小日付を指定します。

以下の例では、表示フォーマットは和暦とし、本日以降を入力した場合はエラーメッセージを表示するよう設定しています。

GcDate1.Fields.AddRange(New DateField() {
                           New DateEraField(),
                           New DateLiteralField(),
                           New DateEraYearField(),
                           New DateLiteralField() With {.Text = "年"},
                           New DateMonthField(),
                           New DateLiteralField() With {.Text = "月"},
                           New DateDayField(),
                           New DateLiteralField() With {.Text = "日"}})
GcDate1.DropDownCalendar.HeaderFormat = "ggg e年 M月"
GcDate1.DropDownCalendar.UseHeaderFormat = True
Dim gcDateInvalidRange1 As GcDateValidator.InvalidRange = New GcDateValidator.InvalidRange With {
    .MaxValue = DateTime.Today,
    .MinValue = New DateTime(1926, 1, 1),
    .InvalidMessage = "昭和1年 〜 本日の範囲の日付を入力できます。"
}
GcDateValidator1.GetValidateItems(GcDate1).AddRange(New Object() {gcDateInvalidRange1})
GcDateValidator1.GetValidateActions(GcDate1).AddRange(New ValidateAction() {New IconNotify()})
GcCustomValidator1.SetValidatingMethod(GcDate1, Sub(context)
                                                    If GcDate1.Value.HasValue Then Return
                                                    context.IsValid = False
                                                    context.EnableIconNotify = True
                                                    context.IconNotify.IconTip = "入力必須項目です"
                                                End Sub)
GcCustomValidator1.SetSupportRealTimeValidating(GcDate1, True)
gcDate1.Fields.AddRange(new DateField[] {
        new DateEraField()
        , new DateLiteralField()
        , new DateEraYearField()
        , new DateLiteralField() { Text = "年" }
        , new DateMonthField()
        , new DateLiteralField() { Text = "月" }
        , new DateDayField()
        , new DateLiteralField() { Text = "日" }});
gcDate1.DropDownCalendar.HeaderFormat = "ggg e年 M月";
gcDate1.DropDownCalendar.UseHeaderFormat = true;
GcDateValidator.InvalidRange gcDateInvalidRange1 = new GcDateValidator.InvalidRange()
{
    MaxValue = DateTime.Today,
    MinValue = new DateTime(1926, 1, 1),
    InvalidMessage = "昭和1年 〜 本日の範囲の日付を入力できます。"
};
gcDateValidator1.GetValidateItems(gcDate1).AddRange(new object[] { gcDateInvalidRange1 });
gcDateValidator1.GetValidateActions(gcDate1).AddRange(new ValidateAction[] { new IconNotify() });
gcCustomValidator1.SetValidatingMethod(gcDate1, (context) =>
{
    if (gcDate1.Value.HasValue) return;
    context.IsValid = false;
    context.EnableIconNotify = true;
    context.IconNotify.IconTip = "入力必須項目です";
});
gcCustomValidator1.SetSupportRealTimeValidating(gcDate1, true);
部署名の設定

部や課といった複数列の表示には、カラムの設定のAddまたはAddrangeメソッドを用いて設定します。

以下の例では、列に部名と課名を表示し、部課名と部課名コードを非表示に設定しています。

GcComboBox1.ListColumns.AddRange(New ListColumn() {
                                 New ListColumn("部名"),
                                 New ListColumn("課名"),
                                 New ListColumn("部課名"),
                                 New ListColumn("部課名コード")})
GcComboBox1.TextSubItemIndex = 2
GcComboBox1.DropDownStyle = ComboBoxStyle.DropDown
GcComboBox1.IsEditable = False
GcComboBox1.ListColumns(0).AutoWidth = True
GcComboBox1.ListColumns(1).AutoWidth = True
GcComboBox1.ListColumns(2).Visible = False
GcComboBox1.ListColumns(3).Visible = False
Dim list As List(Of ListItem) = New List(Of ListItem)()
For Each item As Department In GetData()
    list.Add(New ListItem(New SubItem() {
                          New SubItem(item.DepartmentName),
                          New SubItem(item.DivisionName),
                          New SubItem(item.Name),
                          New SubItem(item.Code)}))
Next
GcComboBox1.Items.AddRange(list.ToArray())
gcComboBox1.ListColumns.AddRange(new ListColumn[] {
        new ListColumn("部名")
        , new ListColumn("課名")
        , new ListColumn("部課名")
        , new ListColumn("部課名コード")
    });
gcComboBox1.TextSubItemIndex = 2;
gcComboBox1.DropDownStyle = ComboBoxStyle.DropDown;
gcComboBox1.IsEditable = false;
gcComboBox1.ListColumns[0].AutoWidth = true;
gcComboBox1.ListColumns[1].AutoWidth = true;
gcComboBox1.ListColumns[2].Visible = false;
gcComboBox1.ListColumns[3].Visible = false;
var list = new List<ListItem>();
foreach (var item in GetData())
{
    list.Add(new ListItem(new SubItem[] {
                new SubItem(item.DepartmentName)
                , new SubItem(item.DivisionName)
                , new SubItem(item.Name)
                , new SubItem(item.Code)
        }));
}

gcComboBox1.Items.AddRange(list.ToArray());
通信欄の設定

複数行テキストの入力を行う場合は、MultilineプロパティをTrueに設定します。コントロールに入力可能な行数を制限する場合はMaxLineCountプロパティを使用することで上限の設定が可能です。

以下の例では、5行までの入力に制限しているほか、折り返しや行間の設定を行っています。

GcTextBox3.Multiline = True
GcTextBox3.WrapMode = WrapMode.CharWrap
GcTextBox3.LineSpace = 2
GcTextBox3.MaxLineCount = 5
gcTextBox3.Multiline = true;
gcTextBox3.WrapMode = WrapMode.CharWrap;
gcTextBox3.LineSpace = 2;
gcTextBox3.MaxLineCount = 5;
フォーカス制御の設定

入力にあわせてフォーカス移動を行う場合はExitOnLastCharプロパティやExitOnLeftRightKeyプロパティを設定します。

以下の例では、最終入力でのフォーカス移動と矢印キーでのフォーカス移動、エンターキーでのフォーカス移動を設定しています。

GcTextBox1.ExitOnLastChar = true
GcTextBox1.ExitOnLeftRightKey = ExitOnLeftRightKey.Both
GcShortcut1.SetShortcuts(GcTextBox1, New ShortcutCollection(New Keys() {Keys.Enter, Keys.Enter Or Keys.Shift},
                         New Object() {GcShortcut1, GcShortcut1},
                         New String() {"NextControl", "PreviousControl"}))
gcTextBox1.ExitOnLastChar = true;
gcTextBox1.ExitOnLeftRightKey = ExitOnLeftRightKey.Both;
gcShortcut1.SetShortcuts(gcTextBox1, new ShortcutCollection(new Keys[] { Keys.Enter, Keys.Enter | Keys.Shift }
                        , new object[] { gcShortcut1, gcShortcut1 }
                        , new string[] { "NextControl", "PreviousControl" }));
必須入力検証の設定

必須項目が入力されているかの検証は汎用検証コンポーネントEmptyTextクラスを利用します。

以下の例では、汎用検証コンポーネントでの必須項目の検証の他、マスクコントロール用にカスタム検証コンポーネントでも必須項目の検証を実施しています。

※マスクコントロールは汎用検証コンポーネントでの必須項目の検証ができません。

''' <summary>
''' 汎用検証(必須入力)の設定
''' </summary>
''' <param name="control"></param>
Private Sub SetCommonValidate(control As EditBase)
    GcCommonValidator1.GetValidateItems(control).AddRange(New Object() {New EmptyText With {.InvalidMessage = "入力必須項目です"}})
    GcCommonValidator1.GetValidateActions(control).AddRange(New ValidateAction() {New IconNotify()})
End Sub

''' <summary>
''' カスタム検証(必須入力)の設定
''' </summary>
''' <param name="control"></param>
Private Sub SetCustomValidate(ByVal control As GcMask)
    GcCustomValidator1.SetValidatingMethod(control, Sub(context)
                                                        If String.IsNullOrEmpty(control.Value) Then
                                                            context.IsValid = False
                                                            context.EnableIconNotify = True
                                                            context.IconNotify.IconTip = "入力必須項目です"
                                                        End If
                                                    End Sub)
    GcCustomValidator1.SetSupportRealTimeValidating(control, True)
End Sub
/// <summary>
/// 汎用検証(必須入力)の設定
/// </summary>
/// <param name="control"></param>
private void SetCommonValidate(EditBase control)
{
    gcCommonValidator1.GetValidateItems(control).AddRange(new object[] { new EmptyText { InvalidMessage = "入力必須項目です" } });
    gcCommonValidator1.GetValidateActions(control).AddRange(new ValidateAction[] { new IconNotify() });
}

/// <summary>
/// カスタム検証(必須入力)の設定
/// </summary>
/// <param name="control"></param>
private void SetCustomValidate(GcMask control)
{
    gcCustomValidator1.SetValidatingMethod(control, (context) =>
    {
        if (string.IsNullOrEmpty(control.Value))
        {
            context.IsValid = false;
            context.EnableIconNotify = true;
            context.IconNotify.IconTip = "入力必須項目です";
        }
    });
    gcCustomValidator1.SetSupportRealTimeValidating(control, true);
}                         
関連トピック

 

 


© 2004 GrapeCity inc. All rights reserved.