SHOEISHA iD

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

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

ComponentZine(InputMan)

マス目状入力機能を持った.NET アプリケーションを作る

InputMan for Windows Forms 5.0Jのキャラクタボックスコントロール「CharMask」を使ったアプリケーションの作成

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

 データの入力方法はいろいろありますが、どこに何を入力するのか、入力フィールドをはっきりさせると、ユーザーに優しいアプリケーションになります。 InputMan for Windows Forms 5.0Jのキャラクタボックスコントロールは、入力フィールドにマス目を表示し、入力データを制限したり書式設定が行えるコントロールです。 今回は、このキャラクタボックスコントロール「CharMask」を使い、確定申告風の入力インターフェースを持ったアプリケーションを作成します。

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

はじめに

 データの入力方法はいろいろありますが、どこの入力フィールドに何を入力するのかをはっきりさせると、ユーザーに優しいアプリケーションになります。InputMan for Windows Forms 5.0Jのキャラクタボックスコントロールは、入力フィールドにマス目を表示し、入力データを制限したり書式設定が行えるコントロールです。

 今回は、このキャラクタボックスコントロール「CharMask」を使い、確定申告風の入力インターフェースを持ったアプリケーションを作成します。

入力時に、3桁ごとにマス目を区切った入力インターフェースを作る
入力時に、3桁ごとにマス目を区切った入力インターフェースを作る

対象読者

 Visual Basic 2005・2008、Visual C# 2005・2008を使ってプログラムを作ったことのある人。

必要な環境

 Visual Basic 2005・2008またはVisual C# 2005・2008、Visual Studio 2005・2008でプログラムが作れる環境。.NET Framework 2.0から追加されたクラスやメンバを使用しているので、.NET Framework 2.0がインストールされていることが必須条件です。

 なお、本プログラムはWindows Vista上で動作するVisual Studioを使用して作成し、動作確認を行っています。

サンプルプログラム実行時の注意事項

 InputMan for Windows Forms 5.0Jを使って作成したアプリケーションを配布する場合、InputMan for Windows Forms 5.0Jのアセンブリファイルを添付する必要があります。これは、Common Language RuntimeのDLLをアプリケーションと一緒に配布するのと同じです。アプリケーションを正常に動作させるためには、次の4つのファイルをインストールする必要があります。

  • GrapeCity.Framework.InputMan.v20.dll…フレームワークアセンブリ
  • GrapeCity.Win.Editors.V50.dll…本体コンポーネント
  • GrapeCity.Framework.InputMan.v20.resources.dll…フレームワークアセンブリのサテライトリソース
  • GrapeCity.Win.Editors.V50.resources.dll…本体コンポーネントのサテライトリソース

 これらのファイルを、プログラムを実行するBinフォルダに格納します。

コントロールのインストール

 はじめてInputMan for Windows Forms 5.0Jを使用する方は、プロジェクトにInputMan for Windows Forms 5.0Jをインストールする必要があります。

 インストーラは、グレープシティのWebページからダウンロードできますので、ここからダウンロードしてインストールしてください。製品ページの[申込フォーム]をクリックし、必要な情報を入力して送信すると、ダウンロードのURLが記載されたメールが送られてきますので、そこからダウンロードできます。

 有償のコンポーネントですが、プロダクトキーを入力せずにインストールすることで、トライアル版として使用できます。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。

コントロールの追加

 InputMan for Windows Forms 5.0Jをインストールしたら、ツールボックスに専用のタブを作成し、InputMan for Windows Forms 5.0Jコンポーネントを追加します。

 今回追加するコンポーネントは、「.NET Frameworkコンポーネント」の「名前空間」が「GrapeCity.Win.Editors」で始まる名前空間のコンポーネント「CharMask」です。

名前空間がGrapeCity.Win.Editorsで始まる名前空間のコンポーネントCharMaskを選択する
名前空間がGrapeCity.Win.Editorsで始まる名前空間のコンポーネントCharMaskを選択する

フォームのデザイン

 フォームはGroupBoxを配置し、その中にCharMaskコントロールを6個配置します。

Formのデザイン
フォームFormのデザイン

CharMaskコントロールについて

 キャラクタボックス(CharMask)コントロールは、原稿用紙のようなマス目を表示し、文字を入力できる入力コントロールです。

 郵便番号のような定型書式を分かりやすく表示したり、数値には桁区切り線を表示したりできるなど、通常のテキストボックスとは違ったデザインで、データ入力フォームを作成することができます。CharMaskコントロールは、1つ1つのマス目を表すCharBoxオブジェクトを保持するコレクション「CharBoxCollection」オブジェクトによって定義されます。

 そして、マス目を表すCharBoxオブジェクトは、次の3つの種類のオブジェクトを持つことができます。InputBoxは入力用の枠を表し1つのInputBoxに対して1文字入力できます。LiteralBoxは、任意の文字をリテラル文字としてCharMaskコントロール内に表示します。SeparatorBoxは入力枠を区切るハイフンを表示します。

 これら3つのオブジェクトと、各オブジェクトが保有するプロパティを使ってデザインします。

  • InputBox (入力用の枠)
  • LiteralBox (リテラル文字)
  • SeparatorBox (ハイフン)
3つのオブジェクト(ヘルプファイルより抜粋)
3つのオブジェクト(ヘルプファイルより抜粋)

 各オブジェクトの設定は、プロパティページおよび、スマートタグとプロパティウィンドウのCharBoxesプロパティから表示できるタイプエディタを使用することで簡単に設定できます。

 また、CharMaskコントロールでは、入力可能な文字種をFormatプロパティで制限できます。Formatプロパティに設定できるキーワードは、次の表のとおりです。

全角 半角 説明
A 大文字のアルファベット(A~Z)
a 小文字のアルファベット(a~z)
K カタカナ(促音・拗音の小書き表記あり)
N カタカナ(促音・拗音の小書き表記なし)
9 数字(0~9)
# 数字および数字関連記号(0~9、+ - $ % ¥ , .)
@ 記号
B 2進数(0または1)
X 16進数(0~9、A~F)
- ひらがな(促音・拗音の小書き表記なし)
- ひらがな(促音・拗音の小書き表記あり)
- すべての全角文字
- サロゲート ペア文字
- H すべての半角文字
- ^ 指定した書式に含まれないすべての文字

 CharMaskコントロールのValueプロパティを使うと、コントロールに対する入力値をリテラル文字列と区切り文字を除いた文字列として取得できます。例えば、「〒981-3205」という形でリテラル文字列と区切り文字とが設定されているときには、Valueプロパティの値は「9813205」となります。

 また、Textプロパティを参照すると、リテラル文字列と区切り文字を含んだ「〒981-3205」という形で入力値を取得できます。

CharMaskコントロールのデザイン

 CharMaskコントロールのデザインでは、今説明したようにCharBoxオブジェクトのデザインが主な作業になります。フォームに配置したCharMaskコントロールのスマートタグから「キャラクターボックスの編集」を選ぶと、ダイアログボックスが表示されます。

スマートタグのメニュー
スマートタグのメニュー

 CharMaskコントロールは、デフォルトでは6つのInputBoxオブジェクトが組み込まれています。マス目を増やしたい場合は、「追加」または「挿入」ボタンを押し、リストから「InputBox」を選びます。リテラル文字やセパレータを追加する場合もこれらのボタンを使用します。

「キャラクターボックスの編集」ダイアログボックス
「キャラクターボックスの編集」ダイアログボックス

InputBoxのデザイン

 InputBoxは、ダイアログボックスの右ペインにあるプロパティウィンドウでデザインします。サイズは、Sizeプロパティで変更します。「AutoSize」プロパティを「False」にすると、好きなサイズに変更できます。Borderプロパティを使うと、罫線の線種変更や罫線の有無を設定できます。

罫線の設定
罫線の設定

 入力文字のフォント設定はFontプロパティで行います。

 Marginプロパティは、マス目の上下左右の間隔を設定します。デフォルトでは上下左右のマージンは0ですが、隣のマス目と間隔をあけたいときは、「Right」に値を設定します。

ここまでのマス目の設定
ここまでのマス目の設定

LiteralBoxとSeparatorBoxのデザイン

 基本的なプロパティ操作は、InputBoxと同じです。「AutoSize」プロパティを「False」にし、Sizeプロパティでサイズを変えます。LiteralBoxに文字を表示するにはTextプロパティを使用します。SeparatorBoxでは、Shapeプロパティで記号をCircleかRectangleのどちらかに設定します。

 また、どちらのオブジェクトも、「ContentAlignment」プロパティで表示文字や記号のオブジェクト内の位置を設定します。このプログラムでは、次のようにプロパティを設定しました。

InputBox AutoSize False
Margin 0, 0, 2, 0
Size 30, 30
Font-Size 12pt
Border-All Color [ActiveBorder], Double(先頭のInputBoxのみ設定)
LiteralBox ContentAlignment MiddleLeft
Font-Size 16pt
Font-Bold True
AutoSize False
Size 160,30
SeparatorBox Border-Bottom None
Left None
Top None
Size 10, 30

 InputBoxコントロールは全部で8個、LiteralBoxは1つ、SeparatorBoxは3桁ずつの区切り記号とするので、2つ追加します。

CharMaskコントロールの設定

 CharMaskコントロール全体のデザインは、CharMaskコントロールのプロパティを使用します。このプログラムでは、BackColorプロパティとBorderStyleプロパティで枠線なしの背景をフォームと同色にしています。

 また、コントロールをドラッグしてすべてのマス目が表示されるようにします。入力書式の設定は、スマートタグの「書式の設定」を選び表示されるダイアログボックスから、入力データの書式を選びます。

書式の設定ダイアログボックス
書式の設定ダイアログボックス

 これで、このコントロールは数字しか受けつけないようになります。なお、ExitOnLastCharプロパティをTrueにすると、データを入力すると次のフォーカスに自動的に移動するようになります。

フォームデザインの仕上げ

 作成したCharMaskコントロールをコピーし、全部で6つ配置します。そして、各コントロールのLiteralBoxに見出し文字列を設定します。

完成したフォーム
完成したフォーム

計算処理

 計算処理は簡単です。最初のCharMaskコントロール「GcCharMask1」から、その下の4つのCharMaskコントロールの値を差し引くだけです。

計算コード

 CharMaskコントロールのValueプロパティから値を取り出し、これを整数データに変換して差し引きます。Visual BasicはValueプロパティの値をそのまま計算に使用できますが、C#ではデータ型変換の処理が必要になります。

 差し引いた値は、最後のCharMaskコントロールのValueプロパティに、文字列に変換して設定します。このコードは、ボタンのClickイベントハンドラに作成します。

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim ans As Long
    Dim data(4) As String

    data(0) = GcCharMask1.Value
    data(1) = GcCharMask2.Value
    data(2) = GcCharMask3.Value

    If GcCharMask4.Value <> "" Then
        data(3) = GcCharMask4.Value
    End If

    If GcCharMask5.Value <> "" Then
        data(4) = GcCharMask5.Value
    End If

    ans = data(0) - data(1) - data(2) - data(3) - data(4)

    GcCharMask6.Value = ans
End Sub
C#
private void button1_Click(object sender, EventArgs e)
{
    long ans;
    String[] data = new String[5];

    data[0] = gcCharMask1.Value;
    data[1] = gcCharMask2.Value;
    data[2] = gcCharMask3.Value;

    if(gcCharMask4.Value != "")
    {
        data[3] = gcCharMask4.Value;
    }

    if (gcCharMask5.Value != "")
    {
        data[4] = gcCharMask5.Value;
    }

    ans = long.Parse(data[0]) - 
          long.Parse(data[1]) - 
          long.Parse(data[2]) - 
          long.Parse(data[3]) - 
          long.Parse(data[4]);

    gcCharMask6.Value = Convert.ToString(ans);
}

 実際に簡単な数字を入れて計算結果を見てみます。

動作チェック
動作チェック

表示文字位置の修正

 プログラムの実行画面をよく見ると「課税対象額」の値がおかしく、左詰めで表示されています。これは、CharMaskコントロールがデフォルトで左詰め表示されるようになっているためです。課税大小額は8桁までマス目がありますが、8桁未満の桁数の数字を代入すると左詰めで表示されてしまいます。そのため、右のマス目が空欄になってしまうのです。

 そこで、最後のCharMaskコントロールの「InputDirection」プロパティを「RightToLeft」にして、右詰めで表示するようにします。

右詰めで表示されるようになる
右詰めで表示されるようになる

 好みによっては、CharMaskコントロールのBorderStyleプロパティを「FixedSingle」にし、SingleBorderColorプロパティで色を付け、LiteralBoxとInputBoxのForeColorも同じ色に合わせると、綺麗な入力インターフェースに仕上げることができます。

カラフルな入力画面にデザインできる
カラフルな入力画面にデザインできる

まとめ

 CharMaskコントロールは、郵便番号や電話番号などの定型書式を入力するのに使用できるだけでなく、今回のように経理などの計算用入力インターフェースにも使える便利なコントロールです。

 マス目の形状も、枠線の設定やPadding、Marginプロパティによっていろいろなデザインが作れますので、フォームのデザインに苦労していたら、このコントロールを試してみてはいかがでしょうか。

製品情報

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

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3771 2009/04/03 12:09

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング