C# Notes.

戻る

 ここには、私が個人的にC#を使っているときに、色々と学んだことを書き留めておこうという、メモのような場所です。
 まだ数は少ないですが、この中に、皆様の必要としている項目があれば幸いです。


◇ コントロール関係

 ・すでにあるコントロールを継承させて使う方法 
   →既存の「Label」 や 「PictureBox」などの機能を、お手軽に拡張する方法を紹介します。
     例えば、メッセージ表示用のラベルに、新たにプロパティを追加させたい場合などに便利です。

<簡単な説明>

1.まず、コードの中に、新たに名前空間「System.Windows.Forms」を追加する。

namespace System.Windows.Forms
{
}

2.以下の書式で、クラスを宣言する。

public class クラス名 : System.Windows.Forms.継承させたいコントロールの名前
{
  //処理内容
}

3.追加したいフィールドやメソッドを追加する。

//例:Pictureboxコントロールに、「Hoge」フィールドと「Foo」フィールドを追加するためのコード。
 
namespace
System.Windows.Forms
{
  public class PictureBox2 : System.Windows.Forms.PictureBox
  {
    public int Hoge;
    
public void Foo()
    {
      Hoge++;
    }
  }
}

4.フォームデザイナを使って、拡張したいコントロールを、フォーム上に配置する。
 (このとき、継承元のコントロールタイプを使うこと。例えば、Labelを拡張させたのなら、Labelを配置する。)

5.Formクラス宣言部の、「アプリケーションのメイン エントリ ポイントです。」という項目の上に、4で配置したコントロールの宣言文があるので、
  それを探す。

//4.でPictureBoxを配置した場合。
  
 
private System.Windows.Forms.PictureBox PictureBox1;

6.上の例の赤字の部分を、2.で作成したクラス名に置き換える。

//3.の例の場合、このように変更する。
  
 
private System.Windows.Forms.PictureBox2 PictureBox1;

7.できあがり。
 

<詳しい説明>

C#には名前空間という便利な機能があり、同じクラスの内容を、別々のファイルに保存したとしても、名前空間さえ合っていれば、
同じものとして見なしてくれます。
 
例えば、こういうクラスの書き方をしても、エラーになりません。

[A.cs]
 
namespace Sister
{
  public class Karen
  {
    int Birthday;
    int BloodType;
  }
}

[B.cs]
 
namespace Sister
{
  public class Haruka
  {
    int Birthday;
    int BloodType;

  }
  
  public class Rinrin
  {
    int Birthday;
    int BloodType;
    int Money;

  }
}


[C.cs]
 
namespace Sister
{
  public class Ani
  {
    static void Main()
    {
      Karen = new Karen();   //別のファイルに実装部分があっても、名前空間が同じなので
      
Haruka= new Haruka();  //同じものであると見なされる。
      
Rinrin= new Rinrin();
   
 }
  }
}
//※ ただし、プロジェクトに「A.cs」「B.cs」「C.cs」を追加しておく必要があります。

これを利用すれば、フォームの部品を定義している「System.Windows.Forms」名前空間に、どこからでもコードを追加することができるのです。(1)
 
この例では、「System.Windows.Forms」に、PictureBoxを継承するコードを記述し、元から用意されている「PictureBox」コントロールに、機能を追加しています。
‥‥これだけで、Formクラスの中に、新たに「PictureBox2」というメンバが増え、使うことができるようになります。(2・3)
 
ただし、このお手軽な方法では、Windowsフォームデザイナに、追加したコントロールを認識させることができません。
なので、継承元のコントロールを配置した後で、手動でコードを書き換えてやる必要があるのです。(4・5・6)


戻る