実行時のイベント(AddHandler)を追加する

私はこの例をいくつかを表示したい...しかし、主なものは、Visual Basic。NETの実行時にコントロールのグループにイベントを追加する方法です。

例えば、我々は多くのコントロールがTextBoxの(それらが呼び出される方法に関係なく)を使用してフォームを必要としています。 あなたは私がやったような何かを行うことができます。

Visual Studioのデザイナーは、ダブルコントロールをクリックして与えるたびに、イベントを管理する責任がありますサブルーチンが作成されます。 TextChangedイベントのテキストボックスのデフォルトの場合には、Visual StudioのデザイナーがTextBox1_TextChangedと呼ばれるサブルーチンを作成しますが、実際の名前は重要ではありません、我々はそれを変更することができ、何も起こりません。 "TextBox1.TextChangedハンドル":重要なことは、行の末尾にあるものです。 このルーチンはTextBox1.TextChangedイベントを "管理"することを示します。

我々は、実行時にこれらの "ハンドラ"を割り当てる可能性があり、この例のように、我々は複数のコントロールで同じ機能を使用して行うことができます。

他のハンドラを入力する構文は次のとおりです。

 AddHandlerのObjeto.Evento、AddressOfをMiRutina

とハンドラを削除します。

 RemoveHandler Objeto.Evento、AddressOfをMiRutina

Veramos今の質問の例:この例ではarem我々は、フォーム上の持っているそれぞれのTextBoxコントロールに2つのイベントを追加するものです。 これらのイベントは、GotFocusイベント(コントロールがフォーカスを取得したときに発生する)とLostFocus(コントロールがフォーカスを失ったときに発生する)になります。 ときに、コントロールは、このケースでは、背景色を変更するには、黄色でフォーカスを持っている。 そして、あなたが失うときは、通常の色に戻ります。
まず最初に、これらの2つのルーチンaremを追加することです。

 ConFocoます。Private Sub(ているSystem.EventArgsとしてのオブジェクトは、ByVal電子としてByVal送信者)
     DirectCastの(送信者、テキ​​ストボックス(TextBox))。BackColorプロパティ= Color.Yellow
 End Subの

 SinFocoます。Private Sub(ているSystem.EventArgsとしてのオブジェクトは、ByVal電子としてByVal送信者)
     DirectCastの(送信者、テキ​​ストボックス(TextBox))。BackColorプロパティ=はColor.White
 End Subの

通常、我々はまだ2つのルーチンを持っていますが、...誰もそれらを呼び出すことはありません。 そのためにはハンドラ関数のTHESを呼び出すためにフォーム上の各コントロールのテキストボックス(TextBox)コントロールを追加する必要があります。

フォームのLoadイベントに次のコードを追加します。

 Me.ControlsのObjectとして各cの
     c.GetType次にGetTypeを(TextBoxコントロール)である場合
         AddHandlerはDirectCastの(C、テキストボックス(TextBox))。GotFocusイベント、AddressOfをconFoco
         AddHandlerはDirectCastの(C、テキストボックス(TextBox))。LostFocusの、AddressOfをsinFoco
    終了する場合
次の

とプレスト、我々はプログラムをテストし、何を必要とすることはできません。 すべてのTextBoxがフォーカスを取得するために、背景色を変更します。 彼らは呼ばれている方法の多くであるか、または何でも関係ありません。

下の写真の操作の形式は次のとおりです。

私はそれが最後のコードを少し説明する価値があると思う。
すべての各実行のために

36レスポンスは、 "ランタイム·イベント(AddHandler)を追加"を

  1. Bitacoras.comは 言う:

    情報Bitacoras.com ...

    Bitacoras.comのレート:私はこの例をいくつかを表示したいですか? しかし、主なものは、Visual Basic。NETの実行時にコントロールのグループにイベントを追加する方法です。 例えば、我々は多くのコントロールを持つフォームを必要とする....

  2. ホセ·アントニオは言う:

    ありがとうございました! はシンプルで機能的なコードです。 この現象だ。 私は(ミスのような...)これらのもののためにVB6でコントロール配列を使用しましたが、この小さなトリックは、エレガントな解決されています。

  3. エドゥアルド·ヘルナンデスサエンスは言う:

    この優れた貢献のおかげで、私は8年間VB6で開発した、そのようなすべてのTexBoxフォームのイベントを1つの書き込みなど、彼がコントロールの配列を持つVB6で行った。ネットを行い、識別する方法を発見していませんでした索引で、各。 ご支援のGaNは、この困難を克服した。 THANKS

  4. フェルナンド氏は述べています:

    こんにちは、非常に良い説明。 はaddHandler面白いツールだと思いますが、私はそれについて質問があります。 私がasp.netでそれを使用して、それは素晴らしい作品、私は動的にリンクジャンルにイベントを追加しますが、はaddHandlerがロードされている場合のみ動作します。 それは負荷でないという動作していることをどのような方法はありますか?
    本当にありがとうございました

  5. ホセは言う:

    極度のよいこのコードは行数、および時間を節約できます。

  6. ホセは言う:

    似たような何かをすることができますが、数字だけ、などでKeyPressイベントを検証するために、何とかそれぞれのテキストボックスに書式を適用するか、または数字のみ、テキストなどでなければならない誰が知って識別します。 私はあなたのポイントを作ったと思っている。

  7. Facundoは言った:

    こんにちは、私はあなたのサイトが好きで、ポストにあなたの献身を賞賛します。 私は現在大学で勉強すると役立ちますしています。

    ご挨拶!

  8. Shocksueは言う:

    良いコードこんにちは、私は別のコントロールと別のイベントに適用することだし、それが起こるとき、私はと言うとこと:
    AddHandlerのmiObjeto.evento、AddressOfをmiRutina
    法 "mirutinaは"デリゲートと同じシグネチャを持っていることを私に語った。
    あなたの例ではあなたが私に起きているかもしれない、彼はあなたのためのデリゲートと仕事のパラメータを送信しませんか?
    あなたの助けを事前にありがとうございます..

    • エリシャは言います:

      それが事実であれば、私は、彼らが何かを(それらがイベントをトリガしたコントロールに送信されます)を送信する必要があるので、パラメータを送信しますが、プロシージャ·コールで定義する必要があります。 たとえば、次のようにします。Private Sub MiRutina(ているSystem.EventArgsとしてのオブジェクトは、ByVal電子としてByVal送信者)。

  9. PreguntadorVBは言う:

    こんにちは、これは、AddHandlerを使用することの良い例で、フォームにコントロールを追加しました。

    私は、実行時に作成されたコントロールにイベントを追加するコードを追加することによって、私のビットを貢献したい理由です。

    挨拶。

    ----------------

    PulsadoDobleClickます。Private Sub(ているSystem.EventArgsとしてのオブジェクトは、ByVal電子としてByVal送信者)
    MsgBoxには、( "あなたはダブルクリックを押した")
    End Subの

    プライベートサブをForm1_Load(ているSystem.EventArgsとしてはSystem.Object、ByValを電子としてByVal送信者)ハンドルMyBase.Load
    新しいTextBox点心のMiCajaDeTexto()のような
    MiCajaDeTexto.Name = "CajaDeTexto"
    Me.Controls.Add(MiCajaDeTexto)
    AddHandlerのMe.Controls(MiCajaDeTexto.Name)のDoubleClick、AddressOfをMe.PulsadoDobleClick
    End Subの

  10. フェルナンド氏は述べています:

    あなたの助けのおかげで、私はトラブルのうちました。 私はVB6から来て、非常に異なっている、私はマイクロソフトでは、彼らがVB6で処理されたのと同じようにVB.NETの彼らの新しいバージョンのコントロールの新しい配列を含むように意図があることをどこかで読んだ。 それは、古いVB6の私たちにとって生活が容易になります。

  11. アレハンドロ·コントレラス氏は述べています:

    優れた、私はパラメータを持つ関数を割り当てることの可能性についてコメントを追加します。

  12. ヴィルは言う:

    偉大なルーチンは、まだVB6から。NETに移行するための大きな助け、ありがとう
    '**与えられたGroupBoxコントロールでテキストを編集するには、ReadOnlyプロパティを使用します。**'

    私のプロジェクトの例:

    プライベートサブをForm1_Load(ているSystem.EventArgsとしてはSystem.Object、ByValを電子としてByVal送信者)ハンドルMyBase.Load

    "GroupBoxコントロールにテキストボックスを検索
    Me.grpDatosPasajero.Controlsのコントロールとして、各cの

    c.GetType次にGetTypeを(TextBoxコントロール)である場合

    AddHandlerはDirectCastの(C、テキストボックス(TextBox))は、AddressOfをconFocoを入力します。
    AddHandlerはDirectCastの(C、テキストボックス(TextBox))は、AddressOfをsinFocoを残す

    終了する場合

    次の

    End Subの

    "ルーチン
    ConFocoます。Private Sub(ているSystem.EventArgsとしてのオブジェクトは、ByVal電子としてByVal送信者)

    (送信者、テキ​​ストボックス(TextBox))DirectCastのない場合。ReadOnlyのその後

    DirectCastの(送信者、テキ​​ストボックス(TextBox))。BackColorプロパティ= Color.PaleGoldenrod
    終了する場合

    End Subの

    SinFocoます。Private Sub(ているSystem.EventArgsとしてのオブジェクトは、ByVal電子としてByVal送信者)

    (送信者、テキ​​ストボックス(TextBox))DirectCastのない場合。ReadOnlyのその後
    DirectCastの(送信者、テキ​​ストボックス(TextBox))。BackColorプロパティ=はColor.White
    終了する場合

    End Subの

    wavファイル

  13. VB MIKは言う:

    私は認めざるを得ないExelentesコードjejejの友人。 良い時間にgaracias。 すべてにご挨拶

  14. エールは言う:

    私は彼のノートの助けを借りてrelizeするために、このコードを共有し、これは私が単一のイベントからの光が、あなたが必要とするすべてのボタンを作成し、押されたボタンに付された条件を持つ関数に対して送信するのに役立つだろう

    Public Class Form1の
    ボタンとしてDim lbls()
    プライベートサブをForm1_Load(ているSystem.EventArgsとしてはSystem.Object、ByValを電子としてByVal送信者)ハンドルMyBase.Load
    薄暗いLOCとして整数= 25
    整数としてmの= 0〜4
    ReDimステートメントを保持lbls(M)
    lbls(M)=新規作成]ボタン
    lbls(M)と
    。テキスト=( "ボタン"&M)
    ロケーション=新しいPoint(0、LOC)
    。サイズ()=新たSystem.Drawing.Size(75、23)
    で終わる
    lbls(M)。名= M
    Me.Controls.Add(lbls(M))
    AddHandlerのMe.Controls(lbls(M)。名)]をクリックし、AddressOfをMe.Click
    LOC + = 25
    次の
    End Subの

    プライベートサブをクリックして(いるSystem.EventArgsとしてのオブジェクトは、ByVal電子としてByVal送信者)
    ボタン=送信者としてDim jの
    MsgBoxには、( "あなたはボタンを押す"&j.Name)
    End Subの
    エンドクラス

    私は希望といくつになります

  15. フリオ·ロペスは言う:

    私は、TabPageを作成すると、この内の実行時にDataGridViewがあり、qはまた、誰もがそれを行う方法を知っていれば、私はあなたの助けを感謝し、デザイン時にこれらのコントロールを追加します。

  16. フリオ·ロペスは言う:

    私は、TabPageが、この中で、実行時にDataGridViewを作成したい、また、画面basic.net視覚的な設計にこれらのコントロールを追加し、誰もがそれを行う方法を知っていれば、私はあなたの助けに感謝。

  17. pepelepuは言う:

    Holas! みんな! 何ここで起こることですべてのテキストを与えるためにそのプロパティです。
    Me.ControlsのObjectとして各cの
    kieroは、私のようにボタンkieroと例えば...特定のコントロールに例外を与える学生のためのいくつかのノートtxtboxと私のフォームに記入し、そのようなコードのような他のtxtboxが存在する場合でも、kiero utlizoを平均化した後、ノートに名前を付ける
    Doubleとして点心(N)
    コントロールとしてDim C
    Me.Controlsの各cの
    TypeOf演算CはTextBoxの場合
    合計(ヴァル(c.Tag))+ = VAL(c.Text)
    終了する場合
    次の
    Me.Controlsの各cの
    整数としてDim I
    TypeOf演算Cはラベルである場合、
    c.Tag> = 0そして、もし
    ヴァル(c.Tag)= Iそして、もし
    c.Text = SUM(I)/ヴァル(txtnn.Text)
    I + = 1
    終了する場合
    終了する場合
    終了する場合
    しかし、私はすべてを取ると平均txtboxがうまくいかない

  18. mekanoは言う:

    pepelepu、このようなexluirを試してみてください。

    ...
    Me.Controlsの各cの
    ケースc.Nameを選択
    "除外するように制御
    ケース "nameControl1" "nameControl2" "nameControl3"
    ループ
    他のケース
    "私はコントロールを制御
    合計(ヴァル(c.Tag))+ = VAL(c.Text)
    選択終了
    次の

  19. モッタJRは言う:

    挨拶、非常に興味深いコードです。

    私はあなたに質問があり、私はさらにMenuStripコントロールの各要素へのハンドラであるか、またはイベントプロシージャを割り当てたり、うまくDBプロシージャの名前を取得することができないないことを、データベースから項目を読み込み、MenuStripを開発した、いくつかのsugenrencia? :私は潜水艦のURLで見つけることができますサンプルファイルを使用しhttp://www.dotnethelp.co.uk/es/vb/108413/menu_strip_vbnetを
    提案のおかげで

  20. ダニエルは言う:

    私はここの間にまで、イベントを発生させると読むことができないという狂ったつもりだった

    "フォームのLoadイベントに以下のコードを追加します。"

    私は時々私はおかげでXD、明らかなことで迷子になる、それが欠落して

  21. エドガーは言う:

    私はちょうどイベントとハンドラを開始し、私はそれがprincipiamosは...エリシャとそのビットが含まれているすべての人に感謝、私たちに彼らの知識を貢献する人々を持っている複雑な(私にとって)は良いと思います。

    ご挨拶!

  22. イエスは言う:

    私はこれに新たなんだと私はあなたの例が面白いと非常に良い見つけ、どのように公衆に行くと、任意のフォームから呼び出すことができるかもしれません...ありがとう

  23. rominaは言う:

    私は助けることができない場合は質問を聞いています。
    私は、移動キーでゲームを制御するプログラムを行う必要があると私は右、左、上から下へ、入れてボタンにキーを割り当てる方法、およびシミュレーションを行う押されたボタンを押したときに知っていただきたいと思います。

  24. セザールは言った:

    親愛なる、クエリは、私はあなたがaddessOfで示されている関数にパラメータを渡す方法を、関数は、パラメータ(例えばIDBOTON)があり、私はIDBOTON情報とBDで探して作成した各ボタンの。

    協力していただきどうもありがとうございます。

  25. poncianuxは言う:

    私は笑(1日)間もない前にこれを学んだが、それは複雑に思われる非常に簡単です、でもSQLCEの挨拶からの機能範囲を呼び出す!

  26. ルイス氏は述べています:

    こんにちは、非常に興味深い、私は、彼らがどのようにC#で実行時にイベントを追加するには、このコードを適用する方法を教えていいなあ。
    おかげで、また、私は実行時に作成されたPictureBoxのClickイベントを追加することです。
    感謝

  27. ハビエル氏は述べています:

    非常にシンプルでありながら非常に実用的。 どうもありがとうございました

  28. ハイダー氏は述べています:

    こんにちは、優れています。 私は質問を持って、このコードでは直接フォーム上に配置されているコントロールで動作します。 しかし、それはフォームのLoad内の各コンテナのコー​​ドを配置せずにコンテナに動作させる?

    • エリシャは言います:

      あなたは、コントロールが再び呼び出されるかどうかを確認する再帰関数を作成することができます。
      それから私はあなたの例を残して、私は時間不足のためにテストされ、私はあなたをここに残すように答えたいと思っていないことを明確にしたい。
      あなたの関数の基礎としてそれを使用します。 運。

      プライベートサブをForm1_Load(ているSystem.EventArgsとしてのオブジェクトは、ByVal電子としてByVal送信者)ハンドルMe.Load
      recorrerContenedores(I)
      End Subの

      サブrecorrerContenedores(コントロールとしてByVal C)
      c.Controls.Count> 0そして、もし
      recorrerContenedores(C)

      "ハンドルを追加します。
      終了する場合
      End Subの

  29. ヒーバーは言う:

    親愛なるこんにちは、私は読んでいた間に、最後に、それはあなたが少しのコードを説明するつもりだったようで、このようなものですので、私は文書の一部を見逃すかどうか知りたかった。

    私はそれが最後のコードを少し説明する価値があると思う。
    すべての各実行のために...

    何かが足りない? もしそうなら、あなたはそれを完了するだろうか? あなたがコミュニティVBに行う貢献をありがとう、あなたを祝福

  30. フアン·カルロスは言う:

    estubo buenasoこんにちは、あなたがあなたのプロジェクトは、私は私の追加ボタンを押すと、最近、彼女がして失われた焦点として機能し始めているkieroので、私の問題は、私はしたくないです。....よくフォームをロードする動作を実現あれば私は問題を抱えている各TextBox ..そのSIP porfa repondeに私を助けて早く感謝...
    saludosss ....

    • エリシャは言います:

      必ずしもはaddHandlerロードでなければなりません...あなたが好きなところ、あなたはそれを置くことができます。 このほかに、(必要な場合)イベントコントロールの関連付けのためにRemoveHandlerステートメントを使用することができます。

  31. マリオ氏は述べています:

    Wooow! この例では、私は途方もない助けてきた、私は本当に、ありがとうございます。 しかし、もちろん私はできません^ ^こんにちは!

コメント