• ベストアンサー

Validated イベントについて

textboxのValidated について調べたのですがMSDNライブラリで検索したところ Validated コントロールの検証が終了すると発生します。 とあります。このコントロールの検証とは何ですか 具体的にわかりやすく教えてください 同様に Validating コントロールが検証を行っているときに発生します これについても具体的にわかりやすく教えてください。 質問をまとめると ValidatedとValidatingのイベントについてわかりやすく 教えて下さいということです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ここでいう検証というのは,コントロールの値がその項目に関して正しいかどうかの検証です。 例えば,電話番号を入力する欄に数字以外が入っていたら,そのコントロールの値は不正となります。 # 何が正しいかは,プログラマが決定します。 Validatingイベントは入力された内容を検証するためのイベントです。 検証結果が正しくなかった場合は, ・e.Cancelの値をTrueにする ・関連するErrorProviderに,検証に失敗した理由を設定する という処理を行います。 Validatedイベントは,Validatingイベントで検証が失敗しなかった場合に発生する後始末用のイベントです。 ・関連するErrorProviderから,値を除去する という処理を行います。 これらのイベントは,CausesValidationプロパティがTrueのコントロールで発生します。 入力の無いコントロールや,自由入力欄の様なコントロールでは,CausesValidationをFalseに設定することで,不要な検証をしないことができます。 MSDNのサンプルコードなども実行してみると,どういうものかがわかると思います。 個人的にはWinFormsといえどもデータバインディングで処理を行うため, Validating/Validatedイベントを使うことはないです。 データバインドさせるオブジェクトで当然検証を行いますが, だいたいは処理可能・不可能を意味するプロパティで検証結果を代替しています。 # IDataErrorInfoが必要なほどリッチなエラー情報を扱っていない……・。 References) MSDN: Control.Validating イベント (System.Windows.Forms) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.validating.aspx MSDN: Windows フォームでのユーザー入力の検証 http://msdn.microsoft.com/ja-jp/library/ms229603.aspx Blog: エラーチェックの体系的な分類と実装パターン - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs http://blogs.msdn.com/b/nakama/archive/2009/09/29/9900568.aspx Blog: 双方向データバインドによる単体入力エラーチェック - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs http://blogs.msdn.com/b/nakama/archive/2009/02/26/9446324.aspx

関連するQ&A

  • VB.NET2003でのTABControlイベントについて

    TabControlの処理について教えて下さい。 TabControlの外に貼り付けたTextBoxの内容が変更された場合、タブのページを変える前に問い合わせのメッセージを表示したいのですがうまくいきません。 具体的には、TabControlのSelectedIndexではページが変わった後にイベントが発生するので遅いのです。また、TabPageのValidatingでは、タブ上のコントロールにフォーカスが当たっていないとイベントすら発生しないし... アドバイスをよろしくお願いします。

  • イベントが発生しません・・・

    Excel VBAでの質問です。 フォーム上にコントロールはTextBox1つしかありません。 商品コードを入力させ、入力値より商品データを検索、編集させようと思います。 コードを入力しエンターキーを押しても、フォーカスの移動場所が無いためかExitイベントが発生しません。 閉じるボタン[×]でフォームを閉じると、Exitイベントは発生するようです。 入力後はフォームは閉じてもかまいませんが、イベントを発生させることはできるでしょうか。 どなたか教えてください。

  • Validatingイベントについて

    VB.NETのValidatingイベントでフォーカスが移動しようとしている(移動先の)コントロールが何であるかを取得することはできるでしょうか?

  • ASP.Net イベント関数内で・・・

    大変お世話になっております。 大変申し訳ございません。突拍子もない質問になるのもしれませんが、 例えば DropDownList の SelectedIndexChanged TextBox のTextChanged などのイベント関数の中で、FormView.ItemUpdating 関数は呼び出せないものでしょうか? Call で呼び出すのですが、ByVal e As FormViewUpdateEventArgs 部分の引数の部分でキャストが合わない等のエラーが発生します。 もともと呼び出せない仕様になっているのでしょうか? これが呼び出せれば、入力後、検証コントロールで排除できなかった入力を元に戻せるのですが、仕様を無視した質問だったでしょうか? 何卒よろしくお願い申し上げます。

  • エクセルVBA フレーム内のイベント

    フレーム内に、テキストボックスを配置し、 そのテキストボックスをExitした場合にFormatを変更したいのですが、 フレーム内にテキストボックスがあるためかイベントが発生しません。   1) Frame1 の中に Textbox1 を配置   2) Textbox1には数値を入力   3) 入力後、次のコントロールに移動した場合、    Textbox1.textをformat(Textbox1.text,"#,##0")にする   Private Sub Textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)     msgbox "Exit"   End Sub   としましたが、ユーザフォームを終了した時に、msgが出力されます。 フレーム内のイベントはどのようにすればよいか、教えていただきたいです。 よろしくお願いいたします。

  • VB2005で練習課題のアイデアを探してます。テキストボックスのイベン

    VB2005で練習課題のアイデアを探してます。テキストボックスのイベントを理解する目的の課題で KeyDown、KeyPress、KeyUp、Enter、GotFocus、Leave、Validating、Validated、LostFocus、TextChanged のうち2つ以上を組み合わせて使うような課題を考えているのですが なかなか良いアイデアが浮かびません。 多くのイベントを1つの設問に盛り込むのではなく 2つのイベントを組み合わせて解く問題がたくさん欲しいです。 可能ならば、イベントの発生順を知らないと解けない問題や 似たイベントだけど違いを知らないと解けない問題だと最高です。

  • コントロールが発生させるイベントを回避したい

    VB2008です。 状態: フォーム上にtextbox1、textbox2、button1があり、textbox1からtextbox2もしくはbutton1にフォーカスが移動したとき 1:textbox2への移動->textbox1のlostfocusイベントを通常通り発生させる。 2:button1への移動->textbox1のlostfocusイベントをキャンセルする。(1度たりとも発生させない、もしくは発生してもその処理を1度たりともさせない。) 1は通常の処理なのでなにもしなくていいと思うのですが、2の処理が上手に浮かびません。button1でフラグを立てて、textbox1_lostfocusの処理を抜けるようにしているのですが、必ず1度は処理が実行されます。 どのようにコードを書けばうまくできるでしょうか。もし、これが仕様ということなら、同じような処理をするにはどうすればよいでしょうか。 わかりにくければ補足いたします。よろしくお願いします。

  • イベント発生について

    お世話になります。 .NET C#で開発をしております初心者です。 テキストボックスに数字を入力したら、その値をメッセージボックスで ユーザーに確認を促したいのですが、そのイベント発生タイミングを どうしたらいいのか考えています。 現在は下記の様にしています。 まず、TextChangeイベントで、変数に代入してから、Leaveイベントでメッセージボックス を表示させています。 本当は、Leaveイベントでなく、その場でメッセージボックスを表示させたいのですが、 でも、TextChangeイベントだけでは、例えば二桁以上の数字を入力しようとしていた場合、 一桁数字を打ち込む度に、TextChangeイベントが発生してしまい、その度にメッセージボックスが 表示されてしまうので、仕方なくLeaveイベントも使っています。 何か良い方法ってありますでしょうか。 どなたかご親切な方、ご教授頂きたく宜しくお願い致します。                           記 private void textBox1_TextChanged(object sender,EventArgs e) { if(textBox1.Text != "-") { if(textBox1.Text != "") { suuryou = int.Parse(textBox1.Text);   } } } private void textBox1_Leave(object sender,EventArgs e) { if(textBox1.Text != "") { MessageBox.Show(suuryou,"", MessageBoxButtons.OK, MessageBoxIcon.Information); } }

  • コマンドボタンのEnterイベント後に、フォーカスを移動したい。

    コマンドボタンのEnterイベント後に、フォーカスを移動したい。 フォームに「TextBox1」(TabIndex=0)「TextBox2」(TabIndex=1)「CommandButton1」(TabIndex=2)の3つのコントロールがある場合。 CommandButton1がクリックされた場合も、TextBox2からCommandButton1に、タブキーまたはエンターキーで、フォーカスが移った場合にも、同じ処理を行い、処理結果によってTextBox1やTextBox2にフォーカスを移したいと考えています。 以下のようなサンプルを作成しました。 Private Sub CommandButton1_Enter() CommandButton1_Click End Sub Private Sub CommandButton1_Click() MsgBox ("OK") TextBox2.SetFocus End Sub この場合、CommandButton1_Enterのイベントが起こった場合、CommandButton1_Click()のTextBox2.SetFocusは効きません。 (正確には、CommandButton1_Enterイベントが終わった時点で無効でしょうか。) Enterイベントは、フォーカスが移動する前に発生するため、このイベントが終わった後に、そもそもの動作に戻り、フォーカス移動が発生してしまうからなのだと思っております。 要は、コマンドボタンにタブキーやエンターキーでフォーカスしても、コマンドボタンをクリックしたのと同じ処理を行い、所定の位置にフォーカスを持っていきたいのですが、どのように行えば良いか、わからない状況です。 よろしくお願いいたします。

  • TEXTBOX_CHANGEのイベント抑制

    TEXTBOX_CHANGE イベントでのイベント抑制方法を教えてください。 エクセルのVBAで、ユーザーフォーム内のTEXTBOXの内容を変更した際にイベントが発生しない様にしたいのですが、うまくいきません。 Private Sub TextBox1_Change() Application.EnableEvents = False UserForm1.TextBox1.Text = "" Application.EnableEvents = True UserForm1.TextBox1.SetFocus End Sub  ユーザーフォーム内では Application.EnableEvents  は使えないのかな?? どなたかご教授をお願いします。