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)