Webアプリケーションでファンクションキーを使用可能に
汎用機に載ったシステムをWindowsに移植する際に、必ずと言っていいほど要望が挙がってくるのが、ファンクションキー対応です。Webアプリケーションとして実現する場合にも同じような要望が上がって来る事が時々あり、その実現方法や代替手段の検討に時間がかかってしまうことも稀ではありません。そうしたときに便利なコントロールが、InputMan for ASP.NETのFunctionKeyコントロールです。
FunctionKeyコントロールでは、ファンクションキーが押下されたときに、WebサーバまでPostBackさせてASP.NETのイベントとして処理するのか、それともWebブラウザ側で検出してJavaScriptで処理するのかが選択できます。
サーバイベントとして処理する場合
サーバイベントとして処理するには、AutoPostBackプロパティをTrueにします。また、AJAX ExtentionsのUpdatePanelの中にFunctionKeyコントロールを配置すると、ページの再読み込みが発生しないので便利です。
Imports GrapeCity.Web.Input Partial Class _Default Inherits System.Web.UI.Page Protected Sub FK_FunctionKeyDown(ByVal sender As Object, _ ByVal e As IMFunctionKey.FunctionKeyEventArgs) _ Handles Server_FunctionKey.FunctionKeyDown Me.MsgBox.Show(e.FunctionKey.ToString, _ GrapeCity.Web.Input.Core.DialogType.Alert) Me.Label1.Text = e.FunctionKey.ToString End Sub End Class
サーバ側からWebブラウザ側にメッセージボックスを表示
リスト1のサンプルコードの中では、InputMan for ASP.NETのMessageBoxコントロールを使って、ASP.NET側からの指示でWebブラウザが稼働しているマシン上にメッセージボックスを表示します。WindowsフォームでMessageBoxを使うのと同じ感覚で実現できるので、非常に便利な機能だと思います。
クライアントイベントとして処理する場合
クライアントイベントとして処理するには、FunctionKeyコントロールを貼ったaspxファイルにリスト2のようなクライアント側コードを記述して、Webブラウザ上でFunctionKeyDownイベントを検出したときに実行するようにします。
<head runat="server"> <title>InputMan for ASP.NET FunctionKeyサンプル</title> <script language="javascript" type="text/javascript" id="FunctionKey1_Script0"> function FunctionKey1_FunctionKeyDown(oFunctionKey, eArgs) { var keyname = ""; switch (eArgs.FunctionKey) { case FunctionKeys.Alt | FunctionKeys.F3: keyname = "F3, Alt"; break; case FunctionKeys.F5: keyname = "F5"; break; default: } document.getElementById("Label2").innerHTML = keyname; alert("クライアント側FunctionKeyDownイベント : " + keyname + "キーが押されました。"); } </script> <link href="CZ0908.css" rel="stylesheet" type="text/css" /> </head>
Silverlightカレンダーコントロール
InputMan for ASP.NETには、ASP.NETコントロールの「Calendarコントロール」とSilvelight2を使った「RichCalendarコントロール」の2種類のカレンダーが付属しています。
どちらも和暦表示に対応しており、六曜なども表示できます。また、標準コントロールと比べると、月の移動などはWebブラウザ側だけで行うなど、操作したときの反応もよくなっています。
InputMan for ASP.NETのCalendarコントロールとRichCalendarコントロールの相違点は、RichCalendarコントロールが内部的にSilverlight2を使って表現力をアップさせている点に尽きます。しかも、Silverlightを使っていることを意識しない点も素晴らしいと思います。もしかしたら、これからのWebフォームの市販コントロールの流行は、Silverlightを意識させずに組み込む方向に進むのかもしれません。
まとめ
Visual Basic 2.0の頃に登場したInputManは、VBX→ActiveXコントロール→.NETコントロールと最新開発環境下で、標準コントロールよりも表現力豊かで生産性の高いコンポーネントとして進化してきました。今回とりあげたInputMan for ASP.NETも、そうしたInputManの直系家族であり、標準のASP.NETコントロールよりも表現力豊かで生産性の高いコンポーネントです。
最終的にはDHTMLに変換されWebブラウザ上で動作するので、私も初めは「同じようなJavaScriptを自分で書けばいいのでは?」といった印象もありましたが、実際使ってみるとその便利さ、IEだけではなくFirefoxでも主要機能は問題なく動作するマルチブラウザ対応具合、動作も想像より軽い、ということに驚かされ、もう手放せないコンポーネントの1つとなってしまいました。
グレープシティの市販コンポーネントを使ったことがある人には、若干なじみの薄いサーバライセンスというライセンス体系ではありますが、採用検討を一考する価値がある一品であると思います。