問題タブ [eventargs]
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.
c# - 誰かが EventArgs の使用方法を最も素人の言葉で説明してくれませんか?
彼らが代議員と関係があることは知っています。試してみましたが、それらの使用方法もまだわかりません。イベント ハンドラーについては少し知っていますが、本当に知りたいのは、ほとんどのメソッドの一部である単純な古いイベント引数を使用する方法です。以下の例
お時間とご配慮をいただきありがとうございます。私はできる限り最高のコーダーになろうとしています。
マイク
c# - eventargs を介してデータを戻す際の問題、またはベスト プラクティスはありますか?
私は、それが何をしているかに関するイベントを生成する非 GUI クラスを持っています (これは、フォームによってユーザーに進行状況を表示するために使用されます)。
イベントの 1 つはAboutToDoSomethingDestructiveEvent
. ここで、フォームが発生したときにユーザーにダイアログを表示し、発生AboutToDoSomethingDestructiveEvent
するかどうかを尋ねますSomethingDestructive
。いいえを選択した場合、顧客に値を設定しEventArgs
、元のフォームはその値を読み取り、実行をスキップしSomethingDestructive
ます。
これは Events と の適切な使用EventArgs
ですか? このアプローチに問題はありますか? この種のことを行うためのベストプラクティスはありますか?
c# - 複数のイベント引数を処理する方法
私は小さなゲームを作成中です。エンジンには、GUIがサブスクライブできるいくつかのイベントがあります。イベントは次のとおりです。
- ボール選択
- balldeselected
- ボールムーブ
- ボールが削除されました
ボールの種類が1つしかない場合は問題ありませんが、X個のボールの種類があります。それらはすべて抽象的なBallクラスから派生しています。
各ボールタイプには、このイベントが発生したときに発生する独自のアクションがあります。それらはすべて、異なる情報をGUIに返す必要があります。たとえば、私はこれら2つのボールタイプを持っています(ここでは情報量を減らすだけです)。
- BallBouncing
- BallExploding
BallBouncingは、GUIに移動先を通知する必要があるため、GUI自体に関する情報を返すだけです。
一方、BallExplodingは、周囲のボールを破壊します。したがって、それがどのボールであり、それが破壊したすべてのボールであるかを言う必要があります。
これらの2つのボールタイプは両方とも同じイベントから発射される可能性がありますが、イベント引数は異なります。値のディクショナリを含めることもできますが、タイプごとにカスタムイベント引数を使用することはそれほど明確ではありません。
また、関与するボールを含むカスタムイベント引数を作成し、ボールタイプごとにそれを継承すると、イベント引数をキャストして戻すことができると思いました。
そのため、GUIイベントハンドラーでは、使用されたボールの種類を知ることでイベント引数をキャストします。私はこの解決策もあまり好きではありません。それは汚れていて、きつく縛られすぎているように感じるからです。
ですから、このような状況に対処するための提案やアイデアはありますか?
ありがとう
ジョン
編集
OK、それで私は自分の構造をもう少し説明して、それが私たちをどこに連れて行くのかを明確にして見ることを試みると思いました:
ボードとボールのインターフェイスを持つオブジェクトDLLがあり、ボードタイプ用とボールタイプ用の2つの列挙型があります(これは主に、作成するオブジェクトのタイプを知るために工場で使用されます)。DLLには、BallクラスとBoardクラスのさまざまな実装もあります。
抽象Ballクラスは、色、そのX座標とY座標、選択されたBallType列挙型などの情報を保持します。これには、Clone()(ICloneableから)とCompareTo(Equalsとハッシュ値ビットを使用)の2つのメソッドがあります。
ボールのボードとゲーム構成データへのアクセスを制御するシングルトンオブジェクトを持つインスタンスマネージャーDLLがあります。このDLLは、BallFactoryとboardFactoryも保持します(これらがObjects DLLに含まれるべきかどうかはわかりません。そうでない理由は、いわばオブジェクトではないためです。これが優れた方法かどうかはわかりません)。
次に、エンジンDLLがあります。これは、ゲームのすべてのロジックを扱います。ボードとボールの作成方法、作成理由、使用方法。BallクラスとBoardクラス用のLogicFactoryがあります(これらのファクトリはすべて、BallTypesとBoardTypes Enumを使用して、使用する実装を決定します)。
ロジッククラスは、ボードがボールをどのように動かすかを決定し、ボールのアクションメソッドを呼び出します。
- ボール選択
- balldeselected
- ボールムーブ
- ボールが削除されました
これはBallLogicクラスにあります。
自分自身のオブジェクトにすべてのロジックを配置しなかった理由は、ロジックと機能を、それに関するデータを格納するだけのオブジェクトから分離する必要があると考えたためです(これは完全に間違っている可能性があります)。Ballがどのように移動/動作できるかに関するほとんどの機能はBallLogicベースクラスに含まれており、各派生クラスはそれが呼び出すものを決定します(すべてのメソッドは仮想であるため、必要に応じて変更することもできます)。
あなたのすべての入力に感謝します、それは本当にappriacatedです。私はこれを楽しみのためにやっていますが、主にさまざまな種類のアプリケーションを開発するための正しい(そして間違った)方法を学ぶためです。
c# - イベントハンドラを非同期で実行するにはどうすればよいですか?
セカンダリ スレッドで操作の連続ループを実行する Visual C# プログラムを作成しています。そのスレッドがタスクを終了したときに、イベントハンドラーをトリガーしたい場合があります。私のプログラムはそれを行いますが、イベントハンドラーがトリガーされると、セカンダリスレッドはイベントハンドラーが終了するまで待機してからスレッドを続行します。継続させるにはどうすればいいですか?これが私が現在それを構成している方法です...
このコードは、私のデバイスの 1 つの API の一部です。OperationFinished イベントがトリガーされたときに、クライアント アプリケーションが API 操作を実行することなく、必要なことを実行できるようにしたい (つまり、それに応じて GUI を更新する)。
また、イベント ハンドラーにパラメーターを渡したくない場合は、OperationFinished(null, new EventArgs())
?を使用して正しい構文を使用できます。
c# - .NET: イベントが発生するたびに新しい EventArgs を作成することは良い方法ですか?
たとえば、ベース イベント公開メソッドがあります。
OnSomeEvent
発生時に追加のイベントをオーバーライドして発生させる派生クラスの場合:
そして、派生がこのように進むと、それを必要とする派生クラスの世代ごとに新しい派生 EventArgs が作成されます。ただしEventArgs
、.NET フレームワークのさまざまな派生物は変更可能 (セッターなし) に設計されていないようです。これにより、オブジェクトが EventArgs の単一のインスタンスを保持し、それを変更することが妨げられます。
したがって、このようなイベントが発生するたびに、関連するすべてのEventArgs
オブジェクトにメモリが再割り当てされます。イベントが 1 秒間に何十回もトリガーされる可能性がある (OnPaint
コントロールのイベントなど) グラフィックが集中するアプリケーションでは、これは本当に良い方法でしょうか?
次のことが可能になるように、いくつかの変更を加えて変更可能にする必要OnExtendedEvent()
がExtendedEventArgs
ありますか?
編集: サンプルコードを修正しました。より明確になるはずです。
c# - アクセス可能なコンストラクターがないカスタムEventArgsクラスをインスタンス化する方法は?
私は問題があります; 1つの特定のイベントが独自のカスタムeventargsを持つ外部ライブラリを使用しています。コンストラクターなし。これらのeventargsを使用して自分のイベントをスローしたい場合、どうすればよいですか?
質問があれば詳細を説明しますが、正確に何を提供すべきかわかりません。:)
c# - イベント引数の割り当て
私はこのイベントハンドラーを持っています
Temp.MouseLeftButtonDown += new MouseButtonEventHandler(Temp_MouseLeftButtonDown);
しかし、Temp_MouseLeftButtonDown関数でアクセスするためにいくつかのパラメーターを送信したいです。どのように割り当てることができますか??
c# - .NET には EventArgs が組み込まれていますか?
単一の引数を持つイベント引数用のジェネリック EventArgs クラスを作成する準備をしています。
その前に、C# には同じ機能が言語に組み込まれていますか? C# 2.0 が出たときにそのようなものに出くわしたことを覚えているようですが、今は見つけられません。
別の言い方をすれば、独自のジェネリック EventArgs クラスを作成する必要がありますか、それとも C# で提供されているのでしょうか? ご協力いただきありがとうございます。
wpf - CompositionTarget.Rendering が RenderingEventArgs ではなく EventArgs を取るのはなぜですか?
CompositionTarget.Renderingイベントは、単純な古い EventArgs を持つ単純な古い EventHandler です。ただし、実際には、明らかに常にRenderingEventArgsのインスタンスを取得します。したがって、イベント ハンドラーは、EventArgs から有用な情報を取得するために、EventArgs をキャストすることから開始する必要があります。
type のイベントではないのはなぜでしょうか。なぜならEventHandler<RenderingEventArgs>
、より簡単に引数に到達できるからです (さらに重要なのは、引数がそこにあることを知ることさえできるからです)。Microsoft がこのイベントに間違った署名を与えることを選択したのはなぜですか?
後方互換性について疑問に思いました.RenderingEventArgsがまだ存在しないリリースはありましたか? ――しかし、そうではないようです。MSDN によると、RenderingEventArgs と CompositionTarget は、両方のプラットフォームの同じリリースで導入されました。WPF では、どちらも .NET 3.0 で追加されました。Silverlight では、どちらも Silverlight 3.0 で追加されました。
何かヒントがあれば、誰かが言った古いディスカッション スレッドに出くわしました。誰かがそれがどのようなパフォーマンスの勝利であるかを説明できるなら、私はそれを答えとして喜んで受け入れます.
c# - C# EventArgs を Xml にシリアル化する
EventArgs オブジェクトを含むオブジェクトをシリアル化しようとしています。シリアル化時に EventArgs オブジェクトを無視すると、すべて正常に動作しますが、その[XmlIgnore]
上に を置かないと、アプリケーションがクラッシュし、エラー メッセージが表示されます。
これが私がシリアライズしているクラスと、それをシリアライズしている方法です:
EventArgs オブジェクトを正しくシリアル化するにはどうすればよいですか?