入力支援系.NETコンポーネントの決定版「InputMan for Windows Forms」
.NET Frameworkが登場する以前のVisual Basicが開発現場で人気を博した理由の1つに、市販COMコンポーネントの豊富さがあります。標準添付のCOMコンポーネントよりも高機能な市販COMコンポーネントを導入することで、作成の手間を考えると採用に踏み切れなかったデザインや操作性を、費用を抑えながら手に入れることができました。
そのようなVisual BasicのCOMコンポーネントの中でも、特に人気だったのがグレープシティの「InputMan」でした。.NET Frameworkが登場したときに、標準.NETコンポーネントにInputManと類似した機能が実装されたことも、COMコンポーネント版InputManの完成度の高さを表しています。
InputMan for Windows FormsはCOMコンポーネント版InputManや標準.NETコンポーネントよりも高機能で使いやすく、最高の部類にはいる入力支援系.NETコンポーネントと言えるでしょう。
かゆいところに手が届くコントロール群
InputMan for Windows Forms 5.0J(以下、InputMan)を購入してアクティベートすると、InputMan自体のコントロールだけではなく、PlusPak for Windows Forms 5.0Jの一部のコントロールを正式版として無償で利用できるようになります(※注)。
トライアル版の事前導入が必要。
InputManにより追加されるコントロール一覧
GcTextBox | テキストコントロール |
GcMask | マスクコントロール |
GcCharMask | キャラクタボックスコントロール |
GcDate | 日付コントロール |
GcTimeSpan | タイムスパンコントロール |
GcNumber | 数値コントロール |
GcRichTextBox | リッチテキストコントロール |
GcComboBox | コンボコントロール |
GcListBox | リストコントロール |
GcIME | IMEコンポーネント(*) |
GcShortCut | ショートカットコンポーネント(*) |
GcAddress | アドレスコンポーネント(*) |
GcCommonValidator | 汎用検証コンポーネント(*) |
GcDateValidator | 日付検証コンポーネント(*) |
GcNumberValidator | 数値検証コンポーネント(*) |
GcTimeSpanValidator | タイムスパン検証コンポーネント(*) |
GcFieldStyler | フィールドスタイラーコンポーネント(*) |
GcBalloonTip | バルーンチップコンポーネント(*) |
GcCalculator | 電卓コントロール |
GcCalendar | 和暦対応拡張カレンダーコントロール |
GcContainer | 拡張パネルコントロール |
GcFunctionKey | ファンクションキーコントロール |
GcKeyLock | キーロックコンポーネント(*) |
InputManは、大きく分けて2種類のコントロールから構成されています。1つはフォーム上に配置してつかう「可視コントロール」、もう1つはフォームデザイナ下部の不可視コントロール領域に配置され実行時には見えない「不可視コントロール」です。
可視コントロールは、.NET Framework添付の標準コントロールと比べ、かゆい所に手が届いているとも言える機能拡張が行われているのが特徴です。そして、不可視コントロールは、InputMan付属コントロールだけではなく.NET Framework添付の標準コントロール対してもプロパティを拡張して便利な機能を追加できるのが特徴です。
標準コントロールよりも多彩な表現力
InputMan導入で最も魅力的なのは、標準コントロールであればオーナードローなどを駆使して慎重に作りあげて初めて実現できるような多彩な見た目を、簡単に実装できてしまう事でしょう。
それでは、上記の図1で利用しているコントロールを簡単に解説していきましょう。
GcCharMaskコントロール
標準のMaskedTextBoxコントロールの代わりに、ぜひ利用したいコントロールの1つが「GcCharMaskコントロール」です。GcCharMaskコントロールを使えば文字の入力欄を四角い枠で表現できます。固定文字なのか入力文字なのかが一目瞭然で、入力可能文字数も分かりやすくなります。
GcComboBoxコントロール
標準のComboBoxコントロールの高さは、使用している文字フォントの大きさに依存しますが、「GcComboBoxコントロール」は任意の高さに指定でき、また文字位置もContentAlignmentプロパティにより、Top/Middle/ButtomやLeft/Center/Rightが選べます。ちょっとした事ですが、画面に配置するコントロールの高さをそろえると画面デザインも映えますし、帳票好きで几帳面なお客様にも非常に喜ばれます。
それだけではなく、ドロップダウンしたリスト部分の背景色にグラデーションをかけたり、リストの一部を使用不可にして選択できない行を定義したりできます。
GcListBoxコントロール
ListBoxコントロールの表現力をアップしたものが、「GcListBoxコントロール」です。図1にあるように複数列を定義して線で分割するなどの設定が簡単に行えます。
GcDateコントロール
DateTimePickerコントロールを日本対応にしたコントロールが、「GcDateコントロール」です。ドロップダウンして表示するカレンダーも含めて、和暦にきちんと対応しています。
GcTextBoxコントロール
標準のTextBoxコントロールはMultilineプロパティの値がFalseのとき、高さを変更できません。ComboBoxコントロールと高さが微妙に異なり、例えば9ポイントのフォントで統一している場合、ComboBoxコントロールの高さは20ピクセル、TextBoxコントロールの高さは19ピクセルとなり、1ピクセルの差が生じてしまいます。画面デザインによっては、この差が非常に気になるときがあります。
「GcTextBoxコントロール」を使えば、Multilineプロパティの値がFalseであったとしても任意の高さに設定でき、テキスト位置も設定可能です。たった1ピクセルの違いですが、画面全体の印象に差が生じる事もあります。そのため、こういった細やかな心づかいができるコントロールは、非常に重宝します。
また、InputMan付属コントロールにはサイドボタンを配置できるものも多く、GcTextBoxコントロールにも図1にあるようにサイドボタンをコントロールの一部として設置可能です。なお、サイドボタンは1つだけでなく、複数個指定できます。
標準コントロールよりも柔軟な操作性
InputMan付属コントロールにあるExitOnLastCharプロパティとExitOnLeftRighKeyプロパティを使うと、今までKeyPressイベントやChangeイベントで行っていた「最大文字数を入れたら次のコントロールに移動する」「左右の矢印キーでコントロールのフォーカスを移動する」などの操作性向上のためのコードを一切書かずに、同じ操作が実現できます。
ExitOnLastCharプロパティ
「ExitOnLastCharプロパティ」をTrueに設定することで、想定された最大文字列長まで文字列を入力すると自動的に次のコントロールに移動します。
本稿に添付したCZ0907ExitOnLastCharサンプルは、[ExitOnLastChar]チェックボックスをチェックすれば、画面上にあるコントロールのExitOnLastCharプロパティの値をTrueに書き換えます。これだけで、例えばGcComboBoxに「11111
」と5桁の文字を入力すると自動的にフォーカスがGcDateに移ります。
ExitOnLastCharプロパティによる動きをさらに便利な操作性に結びつけるには、リスト1にあるように、次の2つの処理を追加するとよいでしょう。
Private Sub Me_Form_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load For Each ctl As GrapeCity.Win.Editors.EditBase In Me.GcContainer1.Controls ctl.EditMode = GrapeCity.Win.Editors.EditMode.FixedOverwrite AddHandler ctl.Enter, AddressOf TopSelectStart Next End Sub Private Sub TopSelectStart(ByVal sender As System.Object, _ ByVal e As System.EventArgs) CType(sender, GrapeCity.Win.Editors.EditBase).SelectionStart = 0 End Sub
- 各コントロールのEditModeプロパティの値を上書きモード(
FixedOverwrite
) - 各コントロールのEnterイベントでカーソルを先頭にする(
SelectionStart=0
)
リスト1では説明の都合によりEditModeプロパティをForm_Loadイベントプロシージャで設定していますが、事前にプロパティとして設定しておくとよいでしょう。実行時のコードとして記述が必要なのは、Enterイベント関連だけということになります。たったこれだけのコードで「全部入力し終えたら自動的に次の入力欄に移動」という操作性が実現できます。
多機能コントロールの実力を発揮させるプロパティページ
InputMan付属コントロールは多機能であるがゆえに、プロパティの数が標準コントロールよりも多くなっています。そこで生じる問題として、どのプロパティを指定すればよいのかわからない、どんな機能があるのかわからない、というものが考えられます。
その問題の解決策として、InputMan付属コントロールではコントロールのタスク一覧を積極的に利用しています。
GcComboBoxコントロールの特徴である「ドロップダウンしたリストにヘッダをつけるかどうか」といった設定もタスク一覧にあるので、GcComboBoxコントロールならではの拡張機能に対する“気付き”にもなると思います。
PlusPakコントロール
InputManをインストールしてライセンスアクティベートしておけば、トライアル版のPlusPakの一部のコントロールもアクティベート状態になります(図7)。以降では、PlusPakのコントロールの中からいくつかの概要と、活用方法を紹介したいと思います。
GcCalendarコントール
カレンダーを見ながら日付を決定するという作業は、意外と多いものです。そのようなときに活躍するのがカレンダーコントロールです。「GcCalenderコントロール」は、次の点で標準コントロール(MonthCalenderコントロール)よりも機能が向上しています。
- 和暦対応
- 六曜表示
- 表示サイズがAutoSizeと任意サイズに対応
- 月単位と年単位の切り替えUIに対応(図7のタイトルバーにある四角マーク)
「いまどき六曜なんて使っているの?」と思う人もいるかもしれませんが、冠婚葬祭や宝くじの売上げなど「大安」や「仏滅」などの六曜が知りたい場合は意外と多いのですが、通常のコントロールでは対応していません。卓上カレンダーを見ながら日付を入力しなくても済むので、非常にありがたいコントロールです。
GcFunctionKeyコントロール
PlusPakには、ファンクションキーを使うUIが作りやすくなる「GcFunctionKeyコントロール」があります。このGcFunctionKeyコントロールもInputManをアクティベートすれば、無償で使えるようになります。
Private Sub GcFunctionKey1_FunctionKeyDown(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) _ Handles GcFunctionKey1.FunctionKeyDown Select Case e.KeyData Case Keys.F3 MessageBox.Show("F3") Case Keys.F5 MessageBox.Show("F5") End Select End Sub
GcFunctionKeyコントロールをフォームに貼っておけば、フォーム上の他のコントロールにフォーカスがあってもファンクションキーを押したときにFunctionKeyDownイベントが発生します。
しかもGcFunctionKeyコントロールはファンクションキーだけでなく、その他のキーを押したときもFunctionKeyDownイベントで処理ができます。
フォームの端にButtonコントロールを並べて貼る代わりに、GcFunctionKeyコントロールでシンプルな画面デザインにするのもよいかもしれません。ただし、Buttonコントロールであればボタンごとにイベントは分かれているので、処理分けのif文が不要な分だけコードはシンプルになります。