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); }