Posts

Windows Forms 入力検証 - Disable にした TextBox の入力検証を抑制する

Image
ボタンクリック時の入力検証などにしようする Form.ValidateChildren()。 Form 内の全コントロールの検証を行うメソッドなのだが、時に検証して欲しくないコントロールまで検証を実行してしまう。例えば、ラジオボタンによってテキストボックスの一部が Disable になったりする場合、ValidateChildren() を呼ぶと Disable のテキストボックスの検証も走ってしまう。 この動作は、ValidationConstraints 型の引数をとる ValidateChildren() のオーバーロードメソッドで制御することが可能。Disable のテキストボックスの入力検証を行わない場合は ValidateChildren(ValidationConstraints.Enabled) とする。個別のコントロールのプロパティや Validating イベントハンドラでは特に何もする必要がない。

Windows Forms 入力検証 - エラー項目のフォーカスをロックしないパターン

Image
今回は、コントロールに入力エラーがある場合もフォーカスをはずせるように実装するパターン。 要件 前回と同じくこういう画面を考える。 この画面を作る上で、このような要求があるとする。 TextBox に必須入力チェックを実装する。ただし、エラーがある場合も TextBox からフォーカスがはずせるようにする。 Register ボタンをクリックした際、画面の全項目の入力チェックを実施し、エラーがあった場合は処理を中止する。 TextBox に入力エラーがある状態でも、閉じるボタン (タイトルバー右の) が機能する。 実装 以下のようにプロパティとイベントの設定を行う。 Form の設定 入力エラー時にもフォーカスをはずせるように実装する場合、ポイントは Form の AutoValidate プロパティです。このプロパティの値を EnableAllowFocusChange に変更すれば、入力エラーがあっても、フォーカスがはずれるようになります。 ただし、AutoValidate を変更しても、入力エラーがあるコントロールにフォーカスが当たっている状態でタイトルバーの閉じるボタンを押した場合、自動的に Close をキャンセルされてしまいます。これを回避するためには、OnFormClosing() をオーバーライドして、e.Cancel = false にします。 protected override void OnFormClosing(FormClosingEventArgs e) { base.OnFormClosing(e); e.Cancel = false; } TextBox の設定 TextBox の入力検証を行う処理を実装する。Validatingイベントハンドラの実装は、フォーカスをはずせなくする場合とまったく同じで、入力エラーがある場合には e.Cancel = true を設定する。ただし、Form の設定により、e.Cancel に true を設定してもフォーカスははずれる。 private void ValidateTextBoxIsNotEmpty(object sender, CancelEventArgs e) { TextBox t...

Windows Forms 入力検証 - エラー項目のフォーカスをロックするパターン

Image
これまでの経験上、画面の単項目入力検証のコードは汚くなりがちなところの1つだ。Windows Forms が提供している機能に対する知識不足のせいで、どうしても無理やり仕様を満たすためのトリッキーなコードを書いてしまうことが多い。そんなことをしているので、後々の障害対応や仕様変更のときにイヤな思いをするはめに... そこで、Windows Forms の入力検証について、要件毎に実装パターンをまとめようと思う。まずは、入力エラーがあるコントロールからフォーカスをはずせないように実装するパターン。 要件 こんな画面を考える。 この画面を作る上で、このような要求があるとする。できるだけコードが汚くならないように、この画面を実装したい。 TextBox に必須入力チェックを実装し、エラーがあった場合は TextBox からフォーカスがはずれないようにする。 Register ボタンをクリックした際、画面の全項目の入力チェックを実施し、エラーがあった場合は処理を中止する。 TextBox に入力エラーがある状態でも、Cancel ボタンと閉じるボタン (タイトルバー右の) はクリックできる。 実装 以下のようにプロパティとイベントの設定を行う。 TextBox の設定 TextBox の入力検証を行う処理を実装する。入力エラーがある場合、e.Cancel に true を設定することで、フォーカスがはずれなくなる。 private void ValidateTextBoxIsNotEmpty(object sender, CancelEventArgs e) { TextBox textBox = (TextBox)sender; if (String.IsNullOrEmpty(textBox.Text)) { this.errorProvider1.SetError(textBox, "This text box must have value."); e.Cancel = true; } else { this.errorProvider1.SetError(textBox, St...

strfriend で正規表現を可視化する

Image
他人が書いた正規表現を解読するのは大変な作業だが、そんな苦痛を少しだけやわらげてくれるオンラインサービス、 strfriend なんていうものがある。 正規表現を入力すると、そのパターンを図示してくれる。

Google AJAX API チームの Google Chrome Frame 検出 API

Google AJAX API チームのブログ で、Google Chrome Frame 検出用 API を作成中、とアナウンスされていた。 Google AJAX APIs Blog: Google Chrome Frame Ajax Detection Google Chrome Frame がインストールされているかどうかを確認できるので、されていなければインストールを促す、あるいは Google Chrome Frame の有無によって細かい制御を行うといったことが可能になります。 シンプルデモページ で使用例を見ることができる。   Web アプリケーションを作る側からすると、テストケースが増えるので Google Chrome Frame に対して諸手を挙げて大賛成できないのだが、あの IE で HTML5 やハイパフォーマンスの JavaScript エンジンを使えるようになるのは、ユーザーとしてはありがたい。 大手のサイトが対応し始めて、雑誌か何かで「Google Chrome Frame で IE を早くする」みたいな特集が組まれたら、一気に Google Chrome Frame 人口が増えそうだ。IE は使い慣れてるから別のものにはしたくないんだけど遅くて... と思っている人は多いはず。

Web.config Security Analyzer 使ってみた

Image
Web.config の脆弱性を検出するツール Web.config Security Analyzer (wcsa) の GUI 版を使ってみた。web.config を読み込ませると、こんなレポートが出てくる。   脆弱性検証ルール 今のところこんなルールが定義されている。 デバッグが無効になっているか Form 認証のパスワードが暗号化されているか カスタムエラーが有効になっているか クッキーレス認証が無効になっているか 認証クッキーを SSL で送信するようになっているか 認証クッキーがユニークになるように考慮しているか スライド式有効期限が無効になっているか クッキーパスに制限を加えているか (‘/’ 以外を設定しているか) 別の Web アプリケーションへのリダイレクトが無効になっているか 暗号化されていないクッキーを拒否しているか 検証されていないクッキーを拒否しているか クライアントのスクリプトからクッキーへのアクセスが無効になっているか ViewState が有効になっているか ViewState のメッセージ認証チェックが有効になっているか ViewState が暗号化されているか リクエストの検証が有効になっているか RoleManager が管理するクッキーを SSL で送信するようになっているか RoleManager が管理するクッキーのスライド式有効期限が無効になっているか RoleManager が管理するクッキーの暗号化が有効になっているか RoleManager が管理するクッキーの検証が有効になっているか RoleManager が管理するクッキーパスに制限を加えているか クッキーレスセッションが無効になっているか トレースが無効になっているか コードアクセスセキュリティレベルが Minimal になっているか Web.config にユーザー情報が定義されていないか   検証ルールとその適用方法 ルールは全て外部 XML ファイルとして定義されており、このファイルに ど...

WebsiteSpark : Web アプリ開発に必要なソフトウェアが 3 年無料に

Scott Guthrie 氏のブログ で WebsiteSpark のローンチがアナウンスされた。Web アプリケーションの開発をやっている小さな企業を補助するためのプログラムで、開発に必要な下記のソフトウェアを 3 年間無料で使えるとのこと (プログラム参加手数料が 100 ドルかかる)。 Visual Studio 2008 Professional を 3 ライセンス Expression Studio 3 (Expression Blend、Sketchflow、Web を含む) を 1 ライセンス Expression Web 3 を 2 ライセンス Windows Web Server 2008 R2 を 4 プロセッサライセンス SQL Server 2008 Web Edition を 4 プロセッサライセンス DotNetPanel コントロールパネル ちなみに Windows Server と SQL Server のライセンスは開発もデプロイも可能。3 年たった後は、使うのをやめても良いし、年間 999 ドルパッケージでこれらのソフトウェアを購入しても良いし、プロダクションサーバーライセンスだけ年間 199 ドルで買っても良いそうだ。 プログラムへの参加資格はこの2つの条件を満たしていること。 自社以外のために Web サイトや Web アプリケーションを作っている 社員数が 10 人未満