C〓の中の動態はコンポーネント(属性と事件)の実現の構想と方法を創建します。


通常はプログラムを書く時、いくつかのコンポーネントを使う時、採用する方法は普通はすべて動的に創建して、使った後に釈放します。ビジュアル   C〓〓〓はプログラムが運行する時も動態的にコンポーネントを創建することができて、次に1つのプログラムの例を結び付けて具体的にVisualを使う方法を紹介します。   C〓の動態はコンポーネントを生成します。まず、動的にコンポーネントを作成する過程で使ういくつかの概論と理論を調べてみましょう。一.   ボxing   (箱詰め)とUnbox ing   (出します):Visualを使っています。   C((zhi)動的にコンポーネントを作成する時、2つのデータ型変数の変換に関わるべきです。この2つのタイプの変数は実値タイプです。   Type変数と参考タイプ(Reference)   Type変数は、この変換プロセスはVisualにあります。   C〓中はBoxingと呼ばれる   (箱詰め)とUnbox ing   (箱から出る。この中で実数型変数を参照型変数に変換するとBoxingとなります。   (箱に詰める参考型変数を実数型変数に変換するとUnbox ingです。   (箱から出る。何が実値タイプかというと、簡単に言えば、私達が普段使っている整体、ブール型、エニュメレート・型などの変数は実値型変数です。参考タイプとは、Visualで   C((zhi)ではObject、Class、Interface、Delegate、String、Arayなどを指していますが、彼と実値タイプの最も主要な違いは、参照型変数が格納されているのは実体オブジェクトを指すポインタであり、実値型変数は実際の実体オブジェクトです。本論文で紹介したプログラムでは、主に箱から出すことに関連しています。具体的な処理方法は、以下に具体的に紹介されています。
二.   プログラム設計におけるキーステップ及び解決方法:ソフトウェアの主な機能は、フォーム上の2つのボタンによって2つの異なる種類のWinFormコンポーネント--ButtonコンポーネントとTextBoxコンポーネントを作成し、作成と同時に各コンポーネントの属性割り当て値を作成し、各作成したコンポーネントにもイベントを作成しました。1)フォーム上でButtonコンポーネントを作成するにはどうすればいいですか?   C((zhi)のコンポーネントを作成するのは非常に便利です。以下の二行文だけで完成できます。

// Button
Button   myButton   =   new   Button   (   )   ;
//
this.Controls.Add   (   myButton   )   ;
ですが、このとき作成されたButtonコンポーネントには属性がありません。また、イベントもありません。ここで紹介したプログラムで作成されたButtonコンポーネントは属性だけでなく、イベントもあります。以下のステートメントは、本明細書でButtonコンポーネントのソースコードを作成します。

// "1 "
counter   +=   1   ;
// "3 "
locY   +=   this.btnAdd.Height   +   3   ;
// Button
Button   myButton   =   new   Button   (   )   ;
// Text ,
myButton.Name   =   "Button   "   +   counter   ;
myButton.Text   =   "    "   +   counter   ;
myButton.Location   =   new   Point   (   btnAdd.Location.X   ,   locY   )   ;  
// Button ,
myButton.MouseEnter   +=   new   System.EventHandler   (   this.btn_MouseEnter   )   ;
myButton.MouseLeave   +=   new   System.EventHandler   (   this.btn_MouseLeave   )   ;
myButton.Click   +=   new   System.EventHandler   (   this.btn_Click   )   ;
//
this.Controls.Add   (   myButton   )   ;  
プログラムは各コンポーネントの属性に値を付けるだけでなく、各コンポーネントに三つのイベントを作成します。注意深い読者は、プログラムが各コンポーネントのために作成されたイベントの名前は同じであることに気づいたかもしれない。このように一つの問題があります。どのButtonコンポーネントがイベントをトリガしたのかをどのように認識するかです。2)どのコンポーネントがイベントをトリガしたかを確認します。プログラムで作成したButtonコンポーネントごとのイベントは同じです。これらのコンポーネントのイベントを正確に処理するには、どのコンポーネントがこのイベントをトリガしたのかをイベントトリガのプログラムで判断する必要があります。これは上に提出した箱詰めと出箱が必要です。Senderオブジェクトは参照型変数であることを知っています。彼が格納しているのは現在のイベントエンティティオブジェクトをトリガするポインタです。彼を実数のオブジェクトタイプに変換するには、以下の文で、どのコンポーネントが現在のイベントをトリガしているかを決定することができます。

private   void   btn_MouseEnter   (   object   sender   ,   System.EventArgs   e   )
{
//
Button   currentButton   =   (   Button   )   sender   ;
//
currentButton.BackColor   =   Color.Red   ;
}  
他のイベントは、このイベントの処理プロセスを真似して処理することができます。3)   どのようにフォーム上でTextBoxコンポーネントを作成するか:TextBoxコンポーネントを作成するプロセスとButtonコンポーネントを作成するプロセスは似ていますが、作成したコンポーネントタイプの上には少し違いがあります。具体的な実施文は以下の通りです。このようにClickイベントでは、どのコンポーネントがイベントをトリガしたかを判断するだけでなく、イベントをトリガしたかを判断するために、以下のステートメントは、これらの判断を実現する具体的な方法である。このとき作成されたイベント文は、

// "1 "
counter01   +=   1   ;
// "3
locY1   +=   this.txtAdd.Height   +   3   ;
// TextBox
TextBox   myBox   =   new   TextBox   (   )   ;
// Text ,
myBox.Name   =   "TextBox   "   +   counter01   ;
myBox.Text   =   "    "   +   counter01   ;
myBox.Location   =   new   Point   (   txtAdd.Location.X   ,   locY1   )   ;  
// TextBox ,
myBox.Click   +=   new   System.EventHandler   (   this.btn_Click   )   ;
//
this.Controls.Add   (   myBox   )   ;  
に変更できます。
上記の結果を実現するプログラムソースコード:

private   void   btn_Click   (   object   sender   ,   System.EventArgs   e   )
{
if   (   sender.GetType   (   )   ==   typeof   (   Button   )   )  
{
Button   control   =   (   Button   )   sender   ;
MessageBox.Show   (   control.Text   +   " ! ");
}
else  
{
TextBox   control   =   (   TextBox   )   sender   ;  
MessageBox.Show   (   control.Text   +   " ! "   )   ;
}
}  
。   まとめ:上記で紹介したように、動的にコンポーネントを作成するのは難しくないことが分かりました。このコンポーネントのためにイベントを作成するのは難しいです。これは実値型変数と参照型変数の変換に関連しています。いわゆる箱詰めと箱出しの問題です。もちろんプログラムの設計の時に、あなたはあれらの可視のコンポーネントを創建するだけではなくて、あれらの見えないコンポーネントをも創建することができて、具体的な実現方法と本文の中の方法は類似します。