SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

japan.internet.com翻訳記事

Windowsフォームの入力チェックを効率化する

ErrorProviderと正規表現を使った入力チェック

ビジネスルールを外部で保守する

 これは本稿の検証エンジンの機能で最も重要な部分ですが、Visual Studio 2005のビジュアルデザイナを使えば非常に簡単に実現できます。とはいえ、学ぶことがないわけではありません。.NETでの永続的な設定については、MSDNライブラリの『方法 : アプリケーション設定を追加または削除する』などを参照してください。

 簡単に言えば、.NETは永続的な設定をローカルシステム上のapplication.exe.configまたはuser.configのいずれかに格納します。これらの設定にアクセスするには、コード内でProperties.Settings.Defaultオブジェクトを使用するか、プロジェクトプロパティの[Settings]ペインのビジュアルデザイナを使用します。ビジネスルールを永続的な設定として格納するということは、それらのルールをuser.configファイルに入れ、必要に応じて自由に編集できる、ということです。さらに一歩進めて、永続的な設定をWindowsフォーム上のコントロールに直接バインドし、ビジネスルールを編集するためのユーザーフレンドリなインターフェイスを作成することも可能です。つまり、ユーザーがフォームの値を編集したときに、その値が自動的にuser.configに格納されるようにすることができます。

 Visual Studio 2005のビジュアルデザイナでは、コードから独立した形でアプリケーションのユーザーインターフェイス層にアクセスすることができます。ビジュアルデザイナ上での操作はコードに自動的に反映されますが、形としては別々に保持されています。フォーム検証用のビジネスルールは、当然、ユーザーインターフェイスに密接に結び付けられます。つまり、フォーム上のコントロールのほとんどに1つ以上の固有のフォーム検証用のビジネスルールが割り当てられます。では、ユーザーインターフェイスを指定するビジュアルデザイナで検証用のビジネスルールを指定してはどうでしょうか。

 ビジュアルデザイナには、フォーム上のコントロールごとにプロパティペインが用意されています。ここで必要なことは、プロパティとしてビジネスルールを追加することだけです。しかし、プロパティペインにはプロパティを追加することができないので、そこが問題です。この問題を簡単に回避する1つの方法は、ユーザー定義可能なプロパティとして提供されているTagプロパティを使用することです。このようなプロパティは1つのコントロールにつき1つだけなので、複数のビジネスルールを1つのパッケージにまとめて、Tagプロパティコンテナに割り当てるようにします。このスキーマを使うことで、コントロールを定義するときにビジネスルールを定義し、永続的な設定と組み合わせてビジネスルールを外部化することができます。

 ビジネスルールに関連付けるには、検証対象の各コントロールに、次のような形式の一連の属性から構成されるTagプロパティ値を割り当てます。

<attr1>=<value1>;<attr2>=<value2>;...;<attrn>=<valuen>

 さらに高度なソリューションとして、ExtenderProviderコントロールを使って、利用可能な属性に対応する実際のプロパティを定義し、Tagプロパティを他の用途に使えるように解放しておく方法もありますが、ここでは簡潔かつシンプルにしておくことにしました。

 表1に、利用可能な属性とその型を示します。

表1 検証属性:利用可能な検証属性とその型および簡単な説明
属性説明
maxLenint > 0フィールド内の文字数は指定された数以下でなければならない。
minLenint > 0フィールド内の文字数は指定された数以上でなければならない。
maxValFloatフィールド内の数字は指定された値以下でなければならない。
minValFloatフィールド内の数字は指定された値以上でなければならない。
pattern正規表現フィールドは指定された正規表現に一致しなければならない。

 最初の2つ(minLenmaxLen)では、文字列として取得する値の長さを制御することができます。同様に、その次の2つ(minValmaxVal)では、数値入力の範囲を制御することができます。最後の属性(pattern)には、正規表現の引数が必要です(正規表現については『Regular-Expressions.info』を参照)。ニーズに合わせて属性を「組み合わせて一致」させることができます。表2に、役に立つ一般的な属性の組み合わせを示します。minValmaxValで表すことができる制約は、正規表現のpatternでも表すことができます。

表2 一般的な検証属性の組み合わせ:よく使われる一般的な属性の組み合わせ
属性の一覧意味
maxLen=10値は10文字以下でなければならない。
minVal=0値を負にすることはできない。
minVal=0;maxVal=100値は0以上100以下でなければならない。
minLen=1値は非空でなければならない。
pattern=.値は非空でなければならない。
minLen=5;maxLen=5値はちょうど5文字でなければならない。
pattern=.{5}値はちょうど5文字でなければならない。
pattern=^\S+$値にスペースを入れることはできない。
pattern=^-?(?:\d*\.?\d+|\d+\.)$値は数値でなければならない。
pattern=^\d{3}-\d{3}-\d{4}$値は標準的な米国内の電話番号でなければならない。
pattern=^\w[\w\.]*\@\w+\.\w[\w\.]*$値は電子メールアドレスでなければならない。

 Visual Studioのビジュアルデザイナでフォームをデザインしながら、各コントロールのプロパティペインにビジネスルールを入力することができます。次に、そのプロパティをアプリケーション設定に関連付け、アプリケーションが実行されたときに外部化されるようにする必要があります。ステップは次のとおりです。

 まず、コントロールのTagプロパティにビジネスルールを入力します。次に、プロパティペインで[(ApplicationSettings)]項目を探します(プロパティペインがカテゴリ別に分類されている場合は、[Data]ノードの下にあります)。[(ApplicationSettings)]を展開すると[(PropertyBinding)]項目が表示されます。値フィールドをクリックすると、プロパティエディタを表示するための省略記号([...])ボタンが表示されます(図3を参照)。また、Tagプロパティにはpattern型のビジネスルール(正規表現)が入力されています。

図3 アプリケーション設定
図3 アプリケーション設定

 [(PropertyBinding)]の省略記号ボタンをクリックします。選択したコントロールに関する[Application Settings]ダイアログボックスが開きます(図4を参照)。このダイアログボックスを使って、プロパティ値をコントロールの個々のアプリケーション設定に割り当てます。

図4 新規のApplication Settingsダイアログボックス
図4 新規のApplication Settingsダイアログボックス

 Tagプロパティを探して、対応するドロップダウンリストを開き、[New]をクリックします。リスト内のTagプロパティに入力した値が、既定値(DefaultValue)として表示されます(図5を参照)。[Name]には、この新しい設定の名前を入力します。例えば図5では、この設定はサンプルアプリケーションのleftTextBoxコントロールに関連付けられているので、「leftTextBoxBusinessRules」という名前を使いました。[Scope]には、「Application」または「User」を指定します。「Application」を指定した場合、この設定の値はprogram.exe.configに格納され、単一のコンピュータ上のすべてのユーザーに共通の読み取り専用の値となります。「User」を指定した場合、この設定の値はプログラム内で変更可能になり、変更した値はユーザーの「Application Data」フォルダ内のユーザー固有のuser.configファイルにオーバーライドとして格納されます。

図5 New Application Settingダイアログボックス:新しい設定に名前を割り当てる
図5 New Application Settingダイアログボックス:新しい設定に名前を割り当てる

 [OK]をクリックして[New Application Setting]ダイアログボックスを閉じ、再度[OK]をクリックして[Application Settings]ダイアログボックスを閉じます。これでプロパティペインは図6のようになります。先ほど入力したTagプロパティの値が削除されて代わりに小さいアイコンが表示され、[(ApplicationSettings)]セクションの下にTagプロパティが指定の名前で表示されていることに注意してください。プロパティをアプリケーション設定に割り当てると、そのプロパティ(この場合はTag)はプロパティペインの[(ApplicationSettings)]項目の下に移動し、元のプロパティ値は小さいアイコンに置き換えられます。

図6 設定の完了
図6 設定の完了

 理論上は、これでプロパティのバインディング作業は終わりですが、実際にはまだ終わっていません。実行しなければならないステップがもう1つあります。プロジェクトプロパティウィンドウの[Settings]タブを開いてください。leftTextBoxコントロールの例で言えば、先ほど作成したleftTextBoxBusinessRulesの設定が表示されているはずですが、図7を見ると、Tagプロパティの値(ビジネスルール)がプロジェクトプロパティウィンドウの[Settings]ペインから消えています。

図7 値の削除
図7 値の削除

 Tagプロパティをアプリケーション設定に割り当てたときに、Visual StudioがコントロールのTagプロパティから値を削除したのです。そのため、このアプリケーション設定の既定値として指定されていても、プロジェクトプロパティウィンドウの[Settings]タブには表示されません。

 これを表示するのは簡単です。設定の型をSystem.Objectからstringに変更するだけで、既定値が表示されます(図8を参照してください)。

図8 Tag値の強制表示
図8 Tag値の強制表示

次のページ
実装

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

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Michael Sorens(Michael Sorens)

フリーランスのソフトウェアエンジニア。フェニックス大学やコミュニティカレッジでの指導、2冊の本とさまざまな記事の執筆、さらにオープンソースのWebサイトを通して、優れたデザインの種をまき続けている。Fortune 500企業やベンチャー企業でJava、C#、Perl、C、Lisp、PostScriptなどの...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1012 2007/02/27 00:00

イベント

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

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

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

メールバックナンバー