.NET TIPS [ASP.NET AJAX]NumericUpDownコントロールでアップダウン・ボタンを生成するには?[2.0のみ、C#、VB]山田 祥寛2007/06/07 |
|
|
NumericUpDownコントロール(NumericUpDownExtender)は、ASP.NET AJAX Control Toolkit(以降、Control Toolkit)で提供されるコントロールの1つで、TextBoxコントロールに対して、表示されている数値を増減させるためのアップダウン・ボタン(スピン・ボックスとも呼ばれる)を付与するためのコントロールだ。
Windowsアプリケーションではごく見慣れたユーザー・インターフェイスであるが、NumericUpDownコントロールを利用することで、Webアプリケーションでも限りなくコーディングレスで以下のようなアップダウン・ボタンを導入できるようになる。
[▲]ボタンをクリック |
NumericUpDownコントロールによるアップダウン・ボタンの生成 |
テキストボックス内の数値をアップダウン・ボタンのクリックによって増減できる。 |
動作自体は明快なので、以下ではさっそく、上の画面のようなアップダウン・ボタンをASP.NETページに実装する手順を見ていくことにしよう。
なお、本サンプル・プログラムを動作させるに当たっては、「TIPS:[ASP.NET AJAX]ASP.NET AJAX Control Toolkitを利用するには?」で紹介した手順に従って、Control Toolkitを利用可能な状態にしておく必要がある。
●NumericUpDownコントロールの基本
新規のWebフォーム(NumericUpDown.aspx)を作成したら、フォーム・デザイナから以下の画面の要領でサーバ・コントロールを配置する。また、それぞれのコントロールに対しては、表の内容でプロパティ値を設定しておこう。
NumericUpDown.aspxのフォーム・レイアウト | ||||||||||||||||
各コントロールに対するプロパティの設定内容は以下のとおり。 | ||||||||||||||||
|
NumericUpDownコントロールのTargetControlIDプロパティは、関連付けるTextBoxコントロールを指定するものだ。これによって、TextBoxコントロールtxtNumにNumericUpDownコントロールの機能が付与されたことになるわけだ。
なお、NumericUpDownコントロールのそのほかのプロパティを設定する場合、(NumericUpDownコントロールではなく)関連付けたTextBoxコントロールのプロパティとして設定する必要がある点に注意してほしい。本稿の場合であれば、TextBoxコントロールのプロパティ・ウィンドウに「numud(NumericUpDownExtender)」という項目が追加されているので、この項目の配下から個々のプロパティ値を設定する。
ここでは、取りあえず最低限必要な設定として、Stepプロパティに値を増減する場合の増分/差分値を、Widthプロパティに表示幅を設定しておくことにしよう。ただし、Widthプロパティの値は、アップダウン・ボタン単体ではなくTextBoxコントロールの幅との総計値である点に注意してほしい(従って、アップダウン・ボタン自体の幅である25未満の値を本プロパティに指定することはできない)。この値は、後述するTargetButtonDownID/TargetButtonUpIDプロパティが指定された場合には無視される。
以上で一連の手順は完了だ。作成したサンプル・プログラムを実行し、冒頭の画面のような動作を確認できれば、まずは成功だ。
●自前のアップダウンを設定する方法
もっとも、これだけでは面白くないので、以下ではNumericUpDownで利用可能ないくつかの機能についても見てみることにしよう。
まずはNumericUpDownコントロールが自動で生成するボタンではなく、自身で配置したボタン系コントロールをアップダウン・ボタンとして利用する方法だ。
[減]ボタンをクリック |
変更したサンプル・アプリケーションの実行結果 |
[増][減]ボタンをそれぞれアップダウン・ボタンとして利用する。 |
先ほど作成したNumericUpDown.aspxを以下のように変更してみよう。
NumericUpDown.aspxのフォーム・レイアウト(変更) | ||||||||||||||
プロパティの設定内容は以下のとおり。 | ||||||||||||||
|
NumericUpDownコントロールのTargetButtonDownID/TargetButtonUpIDプロパティは、それぞれアップダウン・ボタンの役割を果たすボタン系コントロールのID値を指定するものだ。TargetButtonDownID/TargetButtonUpIDプロパティを指定した場合、NumericUpDownコントロールはアップダウン・ボタンを自動生成する代わりに、指定されたボタンに対してアップダウン機能を付与するというわけだ。
なお、TargetButtonDownID/TargetButtonUpIDプロパティを指定した場合には、先述したようにNumericUpDownコントロールのWidthプロパティは無視されるので注意すること。
●任意の文字列リストを使って増減を表現する方法
NumericUpDownコントロールでは、数値の増減を表現できるだけではない。あらかじめ文字列リストを用意しておくことで、そのリスト内の項目を順に表示するテキストボックスを作成することも可能だ。
[▲]ボタンをクリック |
変更したサンプル・アプリケーションの実行結果 |
アップダウン・ボタンをクリックすることで、月の和名を順に表示できる。 |
これを行うには、最初に作成したNumericUpDown.aspxに対して追加でRefValuesプロパティを指定するだけだ。指定値は以下のとおり。
睦月;如月;弥生;卯月;皐月;水無月;文月;葉月;長月;神無月;霜月;師走 |
文字列リスト(RefValuesプロパティ)はセミコロン(;)区切りで任意の数だけ列挙が可能だ。
●XML Webサービス・メソッドから前後の値を取得する方法
値リストはRefValuesプロパティで静的に指定するばかりではない。XML Webサービス・メソッドから動的に前後の値を取得することも可能だ。
以下で示すサンプルは、それぞれRandomクラス(System名前空間)で動的に生成した0〜指定値の乱数値を現在値に対して加算/減算してみる例だ。
[▲]ボタンをクリック |
XML Webサービス・メソッドから前後の値を取得するサンプル |
アップダウン・ボタンをクリックすることで、0〜指定値の範囲内の乱数で値を増加/減少する。 |
それでは具体的な実装手順を見てみよう。
1. 新規のXML Webサービス・クラスを定義する
まずは、現在の値に対して、指定した値未満の乱数を加算/減算した後の値を返すためのXML Webサービス・クラスを用意する。
以下に具体的なASP.NET Webサービス(.asmxファイル)のコードを示す。
|
||
前後の値を取得するためのXML Webサービス・クラス(NumericUpDown.asmx)(上:C#、下:VB) |
サンプル・アプリケーションの大まかな流れについては、コード内のコメントを参照していただくとして、ここで注目していただきたいのは、以下の2点だ(なお、ここではXML Webサービス・クラスそのものの記法については割愛する。詳細については、「MSDN:ASP.NETを使用したXML Webサービス」を参照していただきたい)。
(1)XML Webサービス・クラスにはScriptService属性を付与する
ScriptService属性(System.Web.Script.Services名前空間)は、該当のXML Webサービス・クラスがクライアント側スクリプトから呼び出し可能であるかどうかを表すものだ。
NumericUpDownコントロールは(ほかの多くのExtender系のコントロールと同様に)内部的に自動生成したJavaScript経由でサーバ側のXML Webサービスと非同期通信を行うので、通信先となるXML Webサービス・クラスでは必ずScriptService属性を付与する必要がある。
(2)サービス・メソッドのパラメータ名、戻り値の型は固定
NumericUpDownコントロールにおいて、サービス・メソッドの名前は自由に決めることができるが(ここではNextValue/PrevValue)、戻り値のデータ型、および、パラメータの名前/データ型は完全に固定であり、アプリケーション開発者が変更することはできない。
つまり、いかなる場合にもサービス・メソッドは以下のシグニチャに従う必要がある。C#/Visual Basic(VB)いずれを利用しているかにかかわらず、パラメータの名前は大文字/小文字まで厳密に区別されるので、注意してほしい。
|
||
次の値を取得するためのサービス・メソッドのシグニチャ(上:C#、下:VB) |
|
||
前の値を取得するためのサービス・メソッドのシグニチャ(上:C#、下:VB) |
サービス・メソッドがパラメータを介して受け取るのは、テキストボックス上の現在の値(currentパラメータ)、処理を識別するための任意のキー値(tagパラメータ)だ。tagパラメータには、NumericUpDownコントロールのTagプロパティで指定された値がセットされる。後述するように、本稿では増減の最大値を表す値をセットしておくものとする。
tagパラメータは、サービス・メソッドを複数のNumericUpDownコントロールから共有して利用する場合に、処理を分岐させるためのキーとして利用することも可能だ。もちろん、特にキー値が必要ない場合にはTagプロパティは省略しても構わない。
2. NumericUpDownコントロールのプロパティ値を設定する
あとは、サービス・メソッドを呼び出すための関連付け情報をNumericUpDownコントロールに対して設定するだけだ。最初に作成したNumericUpDown.aspx上のNumericUpDownコントロールに対して以下のプロパティ設定を追加する。
プロパティ | 設定値 |
ServiceDownMethod | PrevValue |
ServiceDownPath | NumericUpDown.asmx |
ServiceUpMethod | NextValue |
ServiceUpPath | NumericUpDown.asmx |
NumericUpDownコントロールのプロパティ設定(追加のみ) |
ServiceDownMethodおよびServiceUpMethodプロパティには、XML Webサービスのサービス・メソッド名を指定する。
■
以上、NumericUpDownコントロールで利用可能な諸プロパティの利用方法について紹介してきた。アップダウン・ボタンを生成するだけのごくシンプルなコントロールであるが、プロパティ設定によってさまざまなパターンでのアップダウン機能を実装できることがお分かりいただけたのではないかと思う。
最後に、本稿で登場したNumericUpDownコントロールの主要なプロパティを表にまとめておく。
プロパティ名 | 概要 |
TargetControlID | 関連付けるTextBoxコントロールのID値 |
Width | 表示幅(TextBoxコントロールとアップダウン・ボタンの合計サイズ。TargetButtonDownID/TargetButtonUpIDプロパティの指定時は無視される) |
RefValues | NumericUpDownコントロールで利用する文字列リスト(セミコロン区切り) |
Step | 数値を増減する際の増分/減分(デフォルトは1) |
TargetButtonDownID | 減少ボタンを表すコントロールのID値 |
TargetButtonUpID | 増加ボタンを表すコントロールのID値 |
ServiceDownPath | 減少ボタンをクリックしたときに呼び出される「.asmx」ファイル |
ServiceUpPath | 増加ボタンをクリックしたときに呼び出される「.asmx」ファイル |
ServiceDownMethod | 減少ボタンをクリックしたときに呼び出されるWebサービス・メソッド |
ServiceUpMethod | 増加ボタンをクリックしたときに呼び出されるWebサービス・メソッド |
Tag | 任意のパラメータ値(Webサービス・メソッドに引き渡すカスタム・パラメータ) |
NumericUpDownコントロールの主なプロパティ |
いま一度、サンプル・アプリケーションと照らし合わせながら、自分でアップダウン・ボタンを実装する際の参考にしていただきたい。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Webフォーム 処理対象:ASP.NET AJAX 使用ライブラリ:NumericUpDownコントロール 使用ライブラリ:ScriptService属性(System.Web.Script.Services名前空間) 関連TIPS:[ASP.NET AJAX]ASP.NET AJAX Control Toolkitを利用するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|