問題タブ [event-handling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
1657 参照

c# - イベントハンドラーのラムダ?

C#3のLambda構文を使用すると、ワンライナーの無名メソッドを作成するのに非常に便利です。これらは、C#2が提供してくれたより言葉の多い匿名デリゲート構文を確実に改善したものです。ただし、ラムダの利便性は、ラムダが提供する関数型プログラミングのセマンティクスを必ずしも必要としない場所でラムダを使用したいという誘惑をもたらします。

たとえば、私のイベントハンドラーは、状態値を設定したり、別の関数を呼び出したり、別のオブジェクトにプロパティを設定したりする単純なワンライナーである(または少なくとも最初は)ことがよくあります。私のクラスにはさらに別の単純な関数がありますか、それともコンストラクターのイベントにラムダを詰め込む必要がありますか?

このシナリオでは、ラムダには明らかな欠点がいくつかあります。

  • イベントハンドラーを直接呼び出すことはできません。イベントによってのみトリガーできます。もちろん、これらの単純なイベントハンドラーの場合、直接呼び出す必要がある時間はほとんどありません
  • イベントからハンドラーのフックを解除できません。一方、イベントハンドラーのフックを解除する必要があることはめったにないので、とにかく、これはそれほど問題にはなりません

述べられた理由のために、これらの2つのことは私をあまり気にしません。そして、ラムダをメンバーデリゲートに格納することで、これらの問題の両方が本当に問題である場合は解決できますが、ラムダを便利に使用し、クラスを乱雑にしないという目的に反することになります。

他に2つのことがありますが、それほど明白ではないかもしれませんが、おそらくもっと問題があると思います。

  • 各ラムダ関数は、それを含むスコープに対してクロージャーを形成します。これは、コンストラクターで以前に作成された一時オブジェクトが、それらへの参照を維持するクロージャのために、必要以上に長く存続することを意味する可能性があります。うまくいけば、コンパイラはラムダが使用しないクロージャからオブジェクトを除外するのに十分賢いですが、私にはわかりません。誰か知っていますか?

    幸いなことに、コンストラクターで一時オブジェクトを作成することはあまりないため、これが常に問題になるとは限りません。ただし、私が行ったシナリオと、ラムダの外で簡単にスコープを設定できないシナリオを想像することができます。

  • 保守性が低下する可能性があります。ビッグタイム。関数として定義されているイベントハンドラーとラムダとして定義されているイベントハンドラーがある場合、バグの追跡やクラスの理解が難しくなるのではないかと心配しています。その後、イベントハンドラーが拡張された場合は、それらをクラスレベルの関数に移動するか、コンストラクターにクラスの機能を実装するコードが大量に含まれているという事実に対処する必要があります。 。

ですから、他の人、おそらく関数型プログラミング機能を備えた他の言語の経験を持つ人のアドバイスと経験を利用したいと思います。この種のことについて確立されたベストプラクティスはありますか?イベントハンドラーで、またはラムダがその囲んでいるスコープよりも大幅に長生きするその他の場合にラムダを使用することを避けますか?そうでない場合、ラムダの代わりに実際の関数を使用することを決定するしきい値はどれですか?上記の落とし穴のいずれかが誰かを著しく噛んだことがありますか?思いもよらなかった落とし穴はありますか?

0 投票する
6 に答える
3947 参照

c++ - Borland C++ Builder 5 - エスケープ キーによるキャンセルが機能しない

Borland C++ Builder 5 のダイアログ ボックスの Escape キー ハンドラーでややこしい問題が発生しています。Escape キーがキャンセル イベントを発生させるための他の要件はありますか (以下にリストしたもの以外)?

  1. 「キャンセル」ボタン (TBitBtn) の Cancel プロパティは true に設定されています。
  2. [キャンセル] ボタンの Default プロパティは false に設定されています。
  3. 「キャンセル」ボタンの modalResult は mrCancel に設定されています。

注: 私はまだ Borland C++ Builder 5 でコンパイルされている古いレガシー アプリを使用しています。それを置き換える別のプロジェクトがあります。サポート終了のメンテナンスを行っているところです。

アップデート

4 か月後、ようやく頭を悩ませるのをやめました...アプリケーションの親フォームに実行時の OnShortCut ハンドラが定義されていることがわかりました。Esc ハンドラーが子ダイアログで機能するように、それを無効にする必要がありました。

0 投票する
4 に答える
1958 参照

java - Java: 複合キーボード入力の処理

JButton の背後に登録された KeyListener 内で+とそれぞれを分離する正しい方法は何F1ですか?CTRLF1SHIFTCTRLF1

.. は常に 112 for F1、113 forF2などを返します。CTRLkeyReleased for / SHIFT/ / などのそれぞれのkeyPressed()を自分で処理することで対処できることは理解していますALTが、より良い方法があることを願っています。

大変感謝します!!!

0 投票する
1 に答える
1927 参照

javascript - Javascript / Ajax-Sys.EventHandlerList()からイベントハンドラーを手動で削除します

2つのスクリプトコントロールがあり、一方はもう一方を保持し、次を使用して親の子からのイベントを正常に処理できました。

addItemSelected(子上)は次のとおりです。

getEventsは次のとおりです。

問題は、親を処分するときに、同じことをしたいということです。

しかし、.controlはもう存在しません。これは、子コントロールが既に破棄されているため、.controlプロパティが機能しなくなったためだと思います。

これに照らして、子のイベントリストを実行し、その中のすべてのイベントハンドラーを削除することにしました。

これを行うためのより良い方法はありますか?

0 投票する
2 に答える
2816 参照

delphi - Delphi 2007 でイベント ハンドラを設定し、「Parameter Lists Differ」エラーを取得する

ActiveXライブラリを使用するDelphi 2007でクラスを作成しようとしています。このクラスは、ActiveX ライブラリが ActiveX ライブラリのイベントに情報を追加する独自のイベントを公開する必要があるイベントをキャッチします。

肝心なのは、使用したい ActiveX ライブラリのイベントに独自のプロシージャを割り当てると、次のエラーが発生することです。

パラメータリストは同じ(同じ数のパラメータと同じタイプ)であると確信しているので、間違った方法で行っていると思います。

何か提案があるか、誰かが私がやろうとしていることのサンプルコードを投稿できますか?

0 投票する
3 に答える
1336 参照

vb.net - 変数ボタン vb.net

私はグローバル変数ボタンを宣言しました:

Dim button1 As New Button()

変数なので、このボタンにクリックイベントを追加する方法がわかりません。どうすればいいのか分かりますか?

0 投票する
1 に答える
1445 参照

c# - Button_clickイベントハンドラーをオーバーライドする

MVPパターンを使用してWinFormsアプリケーションを開発しています。ボタンをクリックしたタグの値をプレゼンターに渡したいのですが。プロパティを取得したいのでbutton.Tag、sender引数をタイプにする必要がありますButton。これを行わずにこれを行うにはどうすればよいですか?

オブジェクトをメソッドパラメータのボタンにダウンキャストする必要があります。

0 投票する
1 に答える
2141 参照

c++ - COM イベントの受信

それなし:

  • ATL
  • MFC

ノート:

  • プレーンC++
  • アウトプロセスCOM オブジェクト/サーバー
  • 事前定義された TLB ファイル

質問:

  • COMオブジェクトがシンクにイベント を通知できるように、発信インターフェイスを実装する方法は?
  • 受け取ったら、イベントを適切に処理する方法は?

以下は、実装したいイベント関数です-TLBファイルから:

よろしく

0 投票する
1 に答える
1814 参照

c++ - シンク オブジェクトに送信インターフェイスを実装する方法 (C++)

たとえば、IS8SimulationEvents ラッパー メソッドの実装を含む定義済みの TLB ファイルがあります。

Oleview を使用すると、COM オブジェクトにアタッチされたIConnectionPointContainerインターフェイスを確認できます。

質問:

  • クライアントが COMオブジェクトからイベント通知を受信できるように、シンク オブジェクトに送信インターフェイスを実装する方法

それなし:

  • ATL
  • MFC