C# プログラミング
コンポーネント関係の覚書。
コンポーネントによるプログラミング (MSDNヘルプリンク)ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_fxmclicc/html/d4d4fcb4-e0b8-46b3-b679-7ee0026eb9e3.htm
コンポーネント
コンポーネントとは、System.ComponentModel.IComponentを実装するクラスのこと。そのシンプルな実装はSystem.ComponentMode.Componentクラス。
System.ComponentModel.IComponent
IDisposableを拡張し、Site : ISiteプロパティと、Disposedイベントをつけただけ。
System.ComponentModel.Component
IComponentを実装する。protected virtual void Dispose(bool);
を定義している。Componentのサブクラスでは、リソース解放が必要であればDispose(bool)をoverrideする。
コントロール
コントロールとは、GUIをもつコンポーネントのこと。System.Windows.Forms.Controlか、System.Web.UI.Controlのサブクラスのこと。
System.Windows.Forms.Controlのサブクラスは、Windowsフォームのコントロールとなる。
System.Web.UI.ControlのサブクラスはASP.NETのWebフォームのコントロールとなる。
ユーザーコントロール
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/CPref17/html/T_System_Windows_Forms_UserControl.htmUserControlから派生したクラス(コントロール)。
System.Windows.Forms.UserControlなら、Windowsフォームのユーザーコントロール。
System.Web.UI.UserControlなら、Webフォームのユーザーコントロール。
空のコントロールに他のコントロールを張り付けて一つのコントロールにする。
コントロールの複合 (Composition)。
カスタムコントロール
既存のコントロールを拡張するコントロール。具体的には、TextBoxとかButtonとかを継承して、独自クラスを作る。
使い分け
コントロールの種類に関するアドバイスms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_fxmclictl/html/5235fe9d-c36a-4c08-ae76-6cb90b50085e.htm
ログインパネルとか、入力フォームとか、他のコントロールを組み合わせて一つの機能を提供する→ユーザーコントロール
ListBoxや、Buttonに独自機能を追加する。→カスタムコントロール
既存のコントロールとは全く違うものを作る→Controlクラスを継承して構築
VS2005での注意
オプション→「Windowsフォームデザイナ」→「全般」→「AutoToolBoxPopulate」がTrueになってないと、プロジェクト内のカスタムコントロールなりユーザーコントロールが、ツールボックスに自動で追加されない。DataGridViewの使い方
SQLServerとか使わずに、プログラム内のリストをDataGridViewで表示するやりかた。ListViewをDetailにして表示より柔軟。編集とかできるし。
1.表示したいデータの1行(レコード)に当たるクラスか構造体を作る。
作ったクラスか構造体を以降「Record」とする。2.フォームにDataGridViewを置く。
以降、できたDataGridViewをdataGridView1と仮定。3.フォームにBindingSourceコンポーネントを置く。
以降、できたコンポーネントをbindingSource1と仮定。4.メニューの「データ」→「新しいデータソースの追加」→「オブジェクト」
1のRecordを選択。5.bindingSource1のDataSourceで、4で作ったデータソースを選ぶ
6.dataGridView1のDataSourceをbindingSource1にする。
ここで直接4で作ったデータソースを選ぶと、自動的にBindingSourceができるので、それでも良い。 この時点で、Recordのプロパティがカラムとして、dataGridView1に入る。7.dataGridView1のカラムを適当に編集。
8.フォームのLoadイベントあたりで、bindingSource1.DataSourceに、BindingList<Record>のインスタンスを割り当てる。
BindingList<Record>じゃなくて、IBindingListを実装するクラスを自分で作っても良い。
これで、自動的に全部のセルが埋まるはず。やったね。
2006年10月18日(水) 18:54:15 Modified by bitflux