1

C#を学んでいます。私は、言語のイベントとデリゲートの部分を調べていました。私は、自分自身を教育するための WinForms アプリケーションに取り組んでいます。ボタンとその仕組みを理解するために、深く調べてみました。私は以下を見つけました:

1)public partial class Form1 : Formデフォルトの Form1.cs ファイルに行があります。これは部分クラスです。

2) 行を持つ Form1.Designer.cs クラス ファイルもありますpartial class Form1。1) と 2) で述べたファイルを組み合わせて、完全なクラスを形成します。

3) From1.Designer.cs ファイルには、最終的にボタン オブジェクトを作成する多くのステートメントが含まれています。また、私にとって特に興味深い声明があります。

this.btn_BaseBuildLocation.Click += new System.EventHandler(this.btn_BaseBuildLocation_Click);

このステートメントは、デリゲート Click にカスタム関数を追加します。このデリゲートは、Control クラス (System.Windows.Forms.dll) で次のように宣言されています。

public event EventHandler Click;

4) EventHandler は、System.EventHandler.cs (mscorlib.dll) で定義されたデリゲートです。

5) Button クラスは Control クラスを継承するため、Click EventHandler にアクセスできます。

6) Button クラスには、誰かがクリックしたことがわかったら、フローを処理するためのすべてのロジックがあります。内部の詳細を理解するために、Mono で使用される Button クラスを調べました。学びたいほとんどすべてのクラスでこれを行います。

7) これはすべて非常に美しいです。しかし、Button オブジェクトがクリックされたことをどのように認識するのかがわからなかったという事実に悩まされました。

8) VC++ とそれがイベントを処理する方法を調べました。メッセージループ、イベントキューなどについて多くのことを見つけました...

質問:

1) イベントを処理する VC++ の方法は .NET のものと同じですか?

2) もしそうなら、それらの詳細を調べる方法はありますか?

どんな助けでも大歓迎です。ありがとう。

4

4 に答える 4

2

Button は、技術的には Window です。ウィンドウハンドルがあります。

つまり、Dispatcher は、必要に応じてキーボード イベントとマウス イベントを Button にルーティングします。Button には、MouseDown および MouseUp イベントが有効なクリックを構成し、Click イベントを発生させるタイミングを決定する内部ロジックがあります。

于 2013-07-15T07:56:57.083 に答える