SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(InputMan)

日本を知り尽くした入力支援コンポーネントの真髄!
「InputMan for Windows Forms」徹底解説

  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (50.6 KB)

 入力支援系.NETコンポーネントの「InputMan for Windows Forms」は、日本独自の入力フォームに対応した使いやすい機能が、たくさん詰まっています。今回は、このInputMan for Windows Formsの機能概要と活用方法を解説していきたいと思います。

  • このエントリーをはてなブックマークに追加

入力支援系.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により追加されるコントロール一覧
InputMan (*)は不可視コントロール
GcTextBox テキストコントロール
GcMask マスクコントロール
GcCharMask キャラクタボックスコントロール
GcDate 日付コントロール
GcTimeSpan タイムスパンコントロール
GcNumber 数値コントロール
GcRichTextBox リッチテキストコントロール
GcComboBox コンボコントロール
GcListBox リストコントロール
GcIME IMEコンポーネント(*)
GcShortCut ショートカットコンポーネント(*)
GcAddress アドレスコンポーネント(*)
GcCommonValidator 汎用検証コンポーネント(*)
GcDateValidator 日付検証コンポーネント(*)
GcNumberValidator 数値検証コンポーネント(*)
GcTimeSpanValidator タイムスパン検証コンポーネント(*)
GcFieldStyler フィールドスタイラーコンポーネント(*)
PlusPak (*)は不可視コントロール
GcBalloonTip バルーンチップコンポーネント(*)
GcCalculator 電卓コントロール
GcCalendar 和暦対応拡張カレンダーコントロール
GcContainer 拡張パネルコントロール
GcFunctionKey ファンクションキーコントロール
GcKeyLock キーロックコンポーネント(*)

 InputManは、大きく分けて2種類のコントロールから構成されています。1つはフォーム上に配置してつかう「可視コントロール」、もう1つはフォームデザイナ下部の不可視コントロール領域に配置され実行時には見えない「不可視コントロール」です。

 可視コントロールは、.NET Framework添付の標準コントロールと比べ、かゆい所に手が届いているとも言える機能拡張が行われているのが特徴です。そして、不可視コントロールは、InputMan付属コントロールだけではなく.NET Framework添付の標準コントロール対してもプロパティを拡張して便利な機能を追加できるのが特徴です。

標準コントロールよりも多彩な表現力

 InputMan導入で最も魅力的なのは、標準コントロールであればオーナードローなどを駆使して慎重に作りあげて初めて実現できるような多彩な見た目を、簡単に実装できてしまう事でしょう。

図1 標準コントロールとの外観の相違。ウィンドウ内の左側が標準コントロール、右側がInputMan付属コントロール(サンプルソース内「CZ0907InputManControl」参照)
図1 標準コントロールとの外観の相違。ウィンドウ内の左側が標準コントロール、右側がInputMan付属コントロール(サンプルソース内「CZ0907InputManControl」参照)

 それでは、上記の図1で利用しているコントロールを簡単に解説していきましょう。

GcCharMaskコントロール

 標準のMaskedTextBoxコントロールの代わりに、ぜひ利用したいコントロールの1つが「GcCharMaskコントロール」です。GcCharMaskコントロールを使えば文字の入力欄を四角い枠で表現できます。固定文字なのか入力文字なのかが一目瞭然で、入力可能文字数も分かりやすくなります。

GcComboBoxコントロール

 標準のComboBoxコントロールの高さは、使用している文字フォントの大きさに依存しますが、「GcComboBoxコントロール」は任意の高さに指定でき、また文字位置もContentAlignmentプロパティにより、Top/Middle/ButtomやLeft/Center/Rightが選べます。ちょっとした事ですが、画面に配置するコントロールの高さをそろえると画面デザインも映えますし、帳票好きで几帳面なお客様にも非常に喜ばれます。

 それだけではなく、ドロップダウンしたリスト部分の背景色にグラデーションをかけたり、リストの一部を使用不可にして選択できない行を定義したりできます。

図2 GcComboBoxコントロールのドロップダウン
図2 GcComboBoxコントロールのドロップダウン

GcListBoxコントロール

 ListBoxコントロールの表現力をアップしたものが、「GcListBoxコントロール」です。図1にあるように複数列を定義して線で分割するなどの設定が簡単に行えます。

GcDateコントロール

 DateTimePickerコントロールを日本対応にしたコントロールが、「GcDateコントロール」です。ドロップダウンして表示するカレンダーも含めて、和暦にきちんと対応しています。

図3 GcDateコントロールのドロップダウン
図3 GcDateコントロールのドロップダウン

GcTextBoxコントロール

 標準のTextBoxコントロールはMultilineプロパティの値がFalseのとき、高さを変更できません。ComboBoxコントロールと高さが微妙に異なり、例えば9ポイントのフォントで統一している場合、ComboBoxコントロールの高さは20ピクセル、TextBoxコントロールの高さは19ピクセルとなり、1ピクセルの差が生じてしまいます。画面デザインによっては、この差が非常に気になるときがあります。

 「GcTextBoxコントロール」を使えば、Multilineプロパティの値がFalseであったとしても任意の高さに設定でき、テキスト位置も設定可能です。たった1ピクセルの違いですが、画面全体の印象に差が生じる事もあります。そのため、こういった細やかな心づかいができるコントロールは、非常に重宝します。

 また、InputMan付属コントロールにはサイドボタンを配置できるものも多く、GcTextBoxコントロールにも図1にあるようにサイドボタンをコントロールの一部として設置可能です。なお、サイドボタンは1つだけでなく、複数個指定できます。

図4 サイドボタンの編集
図4 サイドボタンの編集

標準コントロールよりも柔軟な操作性

 InputMan付属コントロールにあるExitOnLastCharプロパティとExitOnLeftRighKeyプロパティを使うと、今までKeyPressイベントやChangeイベントで行っていた「最大文字数を入れたら次のコントロールに移動する」「左右の矢印キーでコントロールのフォーカスを移動する」などの操作性向上のためのコードを一切書かずに、同じ操作が実現できます。

ExitOnLastCharプロパティ

 「ExitOnLastCharプロパティ」をTrueに設定することで、想定された最大文字列長まで文字列を入力すると自動的に次のコントロールに移動します。

図5 ExitOnLastCharプロパティをサポートするコントロール(サンプルソース内「CZ0907ExitOnLastChar」参照)
図5 ExitOnLastCharプロパティをサポートするコントロール

 本稿に添付したCZ0907ExitOnLastCharサンプルは、[ExitOnLastChar]チェックボックスをチェックすれば、画面上にあるコントロールのExitOnLastCharプロパティの値をTrueに書き換えます。これだけで、例えばGcComboBoxに「11111」と5桁の文字を入力すると自動的にフォーカスがGcDateに移ります。

 ExitOnLastCharプロパティによる動きをさらに便利な操作性に結びつけるには、リスト1にあるように、次の2つの処理を追加するとよいでしょう。

リスト1 CZ0907ExitOnLastChar_Form.vb
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
  1. 各コントロールのEditModeプロパティの値を上書きモード(FixedOverwrite
  2. 各コントロールのEnterイベントでカーソルを先頭にする(SelectionStart=0

 リスト1では説明の都合によりEditModeプロパティをForm_Loadイベントプロシージャで設定していますが、事前にプロパティとして設定しておくとよいでしょう。実行時のコードとして記述が必要なのは、Enterイベント関連だけということになります。たったこれだけのコードで「全部入力し終えたら自動的に次の入力欄に移動」という操作性が実現できます。

多機能コントロールの実力を発揮させるプロパティページ

 InputMan付属コントロールは多機能であるがゆえに、プロパティの数が標準コントロールよりも多くなっています。そこで生じる問題として、どのプロパティを指定すればよいのかわからない、どんな機能があるのかわからない、というものが考えられます。

 その問題の解決策として、InputMan付属コントロールではコントロールのタスク一覧を積極的に利用しています。

図6 タスクの例(GcComboBoxタスク)
図6 タスクの例(GcComboBoxタスク)

 GcComboBoxコントロールの特徴である「ドロップダウンしたリストにヘッダをつけるかどうか」といった設定もタスク一覧にあるので、GcComboBoxコントロールならではの拡張機能に対する“気付き”にもなると思います。

PlusPakコントロール

 InputManをインストールしてライセンスアクティベートしておけば、トライアル版のPlusPakの一部のコントロールもアクティベート状態になります(図7)。以降では、PlusPakのコントロールの中からいくつかの概要と、活用方法を紹介したいと思います。

図7 PlusPakのカレンダー(サンプルソース内「CZ0907PlusPak」参照)
図7 PlusPakのカレンダー(サンプルソース内「CZ0907PlusPak」参照)

GcCalendarコントール

 カレンダーを見ながら日付を決定するという作業は、意外と多いものです。そのようなときに活躍するのがカレンダーコントロールです。「GcCalenderコントロール」は、次の点で標準コントロール(MonthCalenderコントロール)よりも機能が向上しています。

  • 和暦対応
  • 六曜表示
  • 表示サイズがAutoSizeと任意サイズに対応
  • 月単位と年単位の切り替えUIに対応(図7のタイトルバーにある四角マーク)

 「いまどき六曜なんて使っているの?」と思う人もいるかもしれませんが、冠婚葬祭や宝くじの売上げなど「大安」や「仏滅」などの六曜が知りたい場合は意外と多いのですが、通常のコントロールでは対応していません。卓上カレンダーを見ながら日付を入力しなくても済むので、非常にありがたいコントロールです。

GcFunctionKeyコントロール

 PlusPakには、ファンクションキーを使うUIが作りやすくなる「GcFunctionKeyコントロール」があります。このGcFunctionKeyコントロールもInputManをアクティベートすれば、無償で使えるようになります。

リスト2 FunctionKeyDownイベント
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イベントで処理ができます。

図8 GcFunctionKeyコントロールを使って作成したUIの一例
図8 GcFunctionKeyコントロールを使って作成したUIの一例

 フォームの端にButtonコントロールを並べて貼る代わりに、GcFunctionKeyコントロールでシンプルな画面デザインにするのもよいかもしれません。ただし、Buttonコントロールであればボタンごとにイベントは分かれているので、処理分けのif文が不要な分だけコードはシンプルになります。

製品情報

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4205 2009/07/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング